Ich möchte Antworten auf einem Unix-Socket überwachen, ohne die ursprünglichen Verbindungen zu stören, und sie zur Verarbeitung an ein Skript weiterleiten.
Ich weiß, wie man dies mit tcpdump für TCP-Verbindungen macht, aber ich kann anscheinend keine Lösung für lokale Unix-Sockets finden.
Ist das überhaupt möglich?
Antworten:
Es gibt jemanden, der behauptet, dies zu tun, indem er eine App erstellt, die als Gateway zwischen zwei Sockets fungiert und alle Daten protokolliert, die fließen. Sie können also nicht auf einen Socket tippen, aber wenn Sie den Dienst neu starten und für die Verwendung dieser App optimieren können, können Sie den gesamten Datenverkehr sehen.
Hier ist der Link zum Beitrag: Unix Socket Sniffer
Auf eine andere Weise müssen Sie die an den Socket angehängte Prozess-ID suchen, dann mit lsof den Dateideskriptor des Sockets suchen und dann mit strace auf den Dateideskriptor tippen.
Wenn Sie den Client / Server, der den Socket verwendet, stoppen und neu konfigurieren können, empfehle ich immer die erste und zweite Methode. Dies ist schwierig und erfordert, dass Sie auf einen aktuellen Prozess tippen, der bei einigen Apps zum Absturz führen kann.
Hoffe jemand klärt uns auf :)
Viel Glück
quelle
Sie können socat verwenden.
Was oben passiert: Verschieben Sie zuerst die Originalfassung in die sock.original. Socat erstellt einen neuen Socket ('UNIX-LISTEN') am Originalspeicherort und leitet alle an das Original weiter ('UNIX-connect'). Das -v weist socat an, die Ausgabe auch an STDERR auszugeben.
quelle
Sie können auch versuchen, strace für einen der Prozesse auf beiden Seiten des Sockets zu verwenden, da Sie so beobachten können, was geschrieben / gelesen wird. Ich habe in meinen Produktionsumgebungen festgestellt, dass ich kein socat habe, aber ein strace.
Für jeden nützlichen Zweck ist es ein Muss, -s auf etwas Großes zu setzen.
quelle
strace -p <pid>
diese Option , um einen laufenden Prozess zu überwachen.strace -s9999 -f $(for i in $( pidof php5-fpm ) ; do echo -n " -p $i "; done ) 2>&1 | tee /tmp/php.log
und führen Sie dann die Tests aus. Sie haben die /tmp/php.log, um langsam zu überprüfen, ob das Protokoll zu groß ist. Wenn Sie zu viel Verkehr haben, stellen Sie eine Anfrage mit einerprintf
die Wiederholung behandeln lassen.printf " -p %s" $(pidof php5-fpm)
wird jedem pid-Argument ein Präfix voranstellen-p
und ist viel praktischer zu schreiben.dann:
quelle