Как перемещение сокета домена Unix позволяет socat отслеживать трафик?

12

socat может использоваться для мониторинга трафика через сокет домена Unix:

sudo mv /path/to/sock /path/to/sock.original
sudo socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original

Я не совсем понимаю, как работает этот механизм, надеясь, что кто-нибудь сможет немного его объяснить. В частности, как работает перемещение файла сокета, если процесс уже прослушивает его? Также после переезда: ни вернуть, lsof /path/to/sockни /path/to/sock.originalвернуть результаты.

Мэтт Р
источник

Ответы:

11

Эти команды должны выполняться, когда сервер, который вы хотите отслеживать, в данный момент прослушивает /path/to/sock. Тогда, если вы переименуете /path/to/sock, сервер не будет затронут.

Команда socatвставляет человека посередине. Он прослушивает /path/to/socksи перенаправляет весь трафик клиентов /path/to/socks.original(и регистрирует его в процессе с -v).

Это работает только для потоковых сокетов (используйте UNIX-RECVFROM/ UNIX-RECVдля дейтаграммных сокетов) и только в том случае, если клиенты просто используют read/write/send/recvэти сокеты, а не sendmsg()со вспомогательными данными и другими причудливыми вещами.

lsofбудет только сообщать о процессах прослушивания ( socatи сервере для прослушивания и принятых сокетов). Как правило, невозможно связать подключенный сокет на клиенте с путем сокета.

Если вы сделаете это , прежде чем запустить сервер, то это не будет работать как сервер будет пытаться слушать на /path/to/socksи не так socatуже слушает на этом. Или вам нужно указать серверу прослушивать /path/to/sock.originalвместо этого.

Стефан Шазелас
источник