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