GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Socket-Optionen anzeigen

Ich hatte heute das gleiche Problem; leider auf meinem System der -T Option von lsof akzeptiert den f nicht Flag, und ich wollte auch nicht den knetstat bauen Kernel-Modul.

Zum Glück war ich in der Lage, strace zu machen die Anwendung, während sie den Socket einrichtete, wie folgt:

strace -e trace=setsockopt -f -o /tmp/log ./program arg1 arg2

Dies verfolgt ./program arg1 arg2 , wobei die Ablaufverfolgung in /tmp/log geschrieben wird . Wir verfolgen nur die setsockopt() Systemaufruf, der verwendet wird, um Socket-Optionen festzulegen. Die Option -f macht strace verfolgen Sie auch alle untergeordneten Prozesse, die vom verfolgten Programm erstellt wurden.

Wenn Sie Glück haben, /tmp/log wird Zeilen wie diese enthalten:

18806 setsockopt(60, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0

Dies zeigt an, dass 18806 verarbeitet wird genannt setsockopt() auf FD 60 um SO_KEEPALIVE einzustellen bis 1 (Aktivieren) und dass der Systemaufruf mit dem Rückgabecode 0 erfolgreich war .

Es ist auch möglich, an einen bestehenden Prozess anzuhängen:

strace -e trace=setsockopt -f -o /tmp/log -p PID

Mit CTRL-C können Sie sich vom Prozess lösen , und lassen Sie -o weg Option und ihr Argument, um die Ablaufverfolgung an stderr zu senden .


Unter Linux können Sie das Kernelmodul knetstat verwenden, um Socket-Optionen zu überprüfen, einschließlich SO_BROADCAST .


Sie können lsof(8) verwenden . Wenn PID ist die Prozess-ID und FD die Dateideskriptornummer des Sockets ist, an dem Sie interessiert sind, können Sie Folgendes tun:

lsof -a -p PID -d FD -T f

So listen Sie alle IPv4-Sockets eines Prozesses auf:

lsof -a -p PID -i 4 -T f

Dadurch werden die Socket-Optionen mit einem SO= ausgegeben , neben anderen Informationen. Beachten Sie, dass Sie, wenn keine Optionen festgelegt sind, eine leere Zeichenfolge erhalten, sodass Sie etwas wie SO=PQLEN=0 sehen usw. Zum Testen auf SO_BROADCAST , suchen Sie einfach nach der Zeichenfolge SO_BROADCAST nach SO= , z. B.

if lsof -a -p PID -d FD -T f | grep -q 'SO=[^=]*SO_BROADCAST'; then
    # socket has SO_BROADCAST
else
    # it doesn't
fi

Linux
  1. 6 erweiterte tcpdump-Formatierungsoptionen

  2. Zeigen Sie MySQL-Datenbanktypen in Bash an

  3. Tmux-Socket-API?

  4. ufw-Befehlsoptionen

  5. Auswirkung von SO_SNDBUF

Meine bevorzugten Linux-Top-Befehlsoptionen

lsof-Befehl unter Linux (10 Beispiele)

Zeigen Sie den animierten Weihnachtsbaum im Terminal an

Plasma 5.20 &Anzeigeskalierung - Ausgezeichnet

Sniff-UNIX-Domain-Socket

So zeigen Sie offene Dateideskriptoren an, ohne den Befehl lsof zu verwenden