TCP-пакеты не перехвачены слушателем PHP

1343
trejder

У меня есть устройство (локализатор GPS), которое отправляет пакеты TCP (я так думаю) на мой сервер по указанному IP-адресу и через данный порт. Поскольку у меня есть только SSH-доступ к этому серверу, я открыл две сессии и запустил tcpdump(с правильными параметрами) в одной из них, а мой собственный слушатель (написанный на PHP) - во второй.

Когда я соединяюсь с этим IP и портом из любого из моих браузеров, я ясно вижу трафик, захваченный обоими tcpdumpи моим собственным слушателем. Итак, я предполагаю, что все работает отлично.

Однако, когда я заставляю свой локализатор отправлять данные на этот IP / порт, только tcpdumpотвечает, показывая, что он что-то захватил, в то время как вывод моего собственного слушателя остается пустым.

Я новичок в сети и TCP, так что, возможно, я ошибочно предположил, что это TCP-соединение. Может ли кто-то с большим опытом подтвердить это, взглянув на то, что tcpdumpзапечатлено

10:43:37.028958 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [S], seq 1457768261, win 5120, options [mss 1360,nop,wscale 0,nop,nop,TS[|tcp]> 10:43:37.029564 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [S.], seq 1118512962, ack 1457768262, win 5792, options [mss 1460,nop,nop,TS[|tcp]> 10:43:37.526145 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [.], ack 1, win 5200, options [nop,nop,TS val 79 ecr 35113125], length 0 10:43:37.526934 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [P.], ack 1, win 362, options [nop,nop,TS val 35113175 ecr 79], length 152 10:43:38.225678 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [.], ack 153, win 5048, options [nop,nop,TS val 80 ecr 35113175], length 0 10:43:43.765708 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [P.], ack 153, win 5200, options [nop,nop,TS val 89 ecr 35113175], length 119 10:43:43.765768 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [.], ack 120, win 362, options [nop,nop,TS val 35113799 ecr 89], length 0 10:43:44.445757 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [P.], ack 153, win 5200, options [nop,nop,TS val 91 ecr 35113175], length 119 10:43:44.446014 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [.], ack 120, win 362, options [nop,nop,TS val 35113867 ecr 91], length 0 10:47:38.675424 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [F.], seq 153, ack 120, win 362, options [nop,nop,TS val 35137290 ecr 91], length 0 10:47:41.636064 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [.], ack 154, win 5200, options [nop,nop,TS val 568 ecr 35137290], length 0 10:47:41.655520 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [R.], seq 120, ack 154, win 5200, length 0 

Это действительно соединение TCP (тип пакета)? Если да, то может кто-нибудь иметь представление о том, почему мой слушатель не отвечает, в то время как он правильно отвечает на TCP-соединение из браузера? Если это не TCP-соединение, то что это? Что должен слушать мой слушатель, чтобы захватить этот вид трафика?

РЕДАКТИРОВАТЬ : Что меня беспокоит здесь больше всего, так это то, что каждое соединение от моего локализатора помечается с tcpdumpпомощью length 0(хотя ответный ответ всегда имеет некоторую длину). Но я заметил, что подключения к браузеру также помечены length 0, так что, возможно, это не настоящая проблема.

0
Clarification: When you say listener, do you mean network sniffer, or do you mean a service (the passive end of the connection) that has called ? ctrl-alt-delor 11 лет назад 0
@ Richard: Вы говорите с новичком в сети! :] Мой слушатель (должен) вставлять любые (правильно отформатированные) данные, он получает их в БД и не передает никуда больше. Так что я думаю, это скорее пассивный конец, чем сниффер. Данные, отправленные моим локализатором, на 100% адресованы моему слушателю и больше нигде. trejder 11 лет назад 0
ОК, путаница заключалась в том, что tcpdump - это сниффер, а wireshark - еще один, который может прослушивать провода, используя третий компьютер. Но вы говорите о пассивном конце (слушатель, не путайте с читателем. Поскольку оба конца могут читать (соединение становится симметричным, как только соединение установлено))) ctrl-alt-delor 11 лет назад 0

2 ответа на вопрос

1
ctrl-alt-delor

just to answer the last bit (you say this is the most worrying)

This is what I see: all data has a length, all without data (syn,ack,fin,rst) have length 0. It looks OK.

87.111.103.7 port 2020 -- 192.168.1.2 port 7777 syn -> <- syn ack ack -> <-data ack -> data -> <- ack data -> <- ack <- fin fin -> rst -> 
Спасибо за ваш ответ. Но как насчет моего реального вопроса? Это правильная передача по TCP? Если да, то у вас есть идея, почему мой слушатель не захватывает это? Я использовал простую форму прослушивателя TCP [Страница примеров PHP.net] (http://php.net/manual/en/sockets.examples.php) - версия обновлена ​​для целей нескольких клиентов и с некоторыми моими собственными исправлениями. Он отлично фиксирует TCP-соединение от любого браузера, но остается глухим ко всему, что отправляет мой локализатор. trejder 11 лет назад 0
Может быть, покажите нам код, который вы написали. ctrl-alt-delor 11 лет назад 0
Код довольно длинный, и, поскольку он почти такой же, как на [Пример страницы сокетов PHP.net] (http://php.net/manual/en/sockets.examples.php), я думаю, он будет лучше направить вас туда. Это то, что я написал в моем предыдущем комментарии. Если вы хотите увидеть код, который я использую для моего слушателя, перейдите на [Пример страницы сокетов PHP.net] (http://php.net/manual/en/sockets.examples.php) и прокрутите вниз для внесенных пользователем заметок (внизу страницы, пример Хавьера). Спасибо! trejder 11 лет назад 0
0
Stefan Seidel

Your dump looks good. Your device (I assume it's the 192.168.1.2) sends packets of length larger than 0 and your server acknowledges the receipt via 0-byte ACK packets. It will certainly be helpful for you to include -XX in your tcpdump command line.

tcpdump -XX port 2020 
Конечно, это будет полезно. Но нет проблем с `tcpdump` только с моим слушателем PHP - как написано в комментарии выше. Я пытаюсь выяснить, почему мой слушатель остается глухим к локализатору форм соединений (`tcpdump` перехватывает его), в то время как он прекрасно работает, например, для соединений из веб-браузеров? trejder 11 лет назад 0
Ну, я имею в виду полезный в том смысле, что он покажет вам, какие данные ваш слушатель __should__ получает. Например, если устройство отправляет только NUL-байты, то вывод вашего слушателя, скорее всего, не будет отображаться. Stefan Seidel 11 лет назад 0
Thanks! I've included `-xx` in command and did extra info. No, the question is, how can I manually decode, what it has captured -- i.e.: `0x0000: 0008 9bc0 2fb6 74ea 3ae4 64aa 0800 4500 0x0010: 0044 b847 4000 0706 3be3 53dc 6a03 c0a8 0x0020: 0102 07e4 1e61 59ad ed28 0000 0000 c002 0x0030: 1400 1b76 0000 0204 0550 0103 0300 0101 0x0040: 080a 0000`? Is this just a hex notation of real data being sent by my localizer? trejder 11 лет назад 0
С `-XX` (заглавная X) вы также получите нотацию ASCII. Если предоставленные вами данные - это все, что у вас есть, то похоже, что ваш локализатор отправляет пакеты данных emtpy. Возможно, вам придется проверить документацию устройства. Еще один вариант таков: вы останавливаете прослушиватель PHP и вместо этого запускаете прослушиватель командной строки, например: `nc -l 7777 | hexdump -C` (обратите внимание на заглавную C). Stefan Seidel 11 лет назад 0
Ну, [здесь] (http://pastebin.com/Wjs6p846) - это вставка для всего, обычно tcpdump получает из этого локализатора. Я был почти уверен, что тот факт, что он отправляет мусор, является причиной того, что слушатель PHP не может перехватить этот трафик. Нет, я использую очень ограниченный Linux (NAS, не полный сервер) и не могу / не могу установить `nc`. И нет - насколько мне известно, нет документации, API или руководства для разработчиков / опытных пользователей этого локализатора (дешевый Китай TK102). Только некоторые основы для новичков, как это настроить. trejder 11 лет назад 0