Я использовал Scapy для отправки пакетов SCCP или Skinny на мой настольный телефон Cisco. Однако я продолжаю получать эти ошибки повторной передачи TCP, и я полагаю, что это заставляет телефон Cisco не отвечать. У меня есть программа, которая может успешно дать команду телефону набрать номер. Например, программа на «10.10.50.12» отправляет четыре пакета и получает два ACK с телефона («10.30.37.78»). Увидеть ниже:

Тем не менее, когда я использую Python и отправляю команды со Scapy:

Wireshark отправляет четыре пакета и даже распознает их как отдельные сообщения, однако я получаю сообщение об ошибке повторной передачи TCP и не получаю подтверждения от телефона.

Странно, но в "SetLampMessage" нет ничего особенного, чтобы он не получил ошибку. Это просто потому, что это был первый отправленный пакет. Если бы я организовал порядок пакетов по-разному, то, что будет отправлено первым, не получит ошибку.

Я попытался сравнить шестнадцатеричные выводы, вот шестнадцатеричное сравнение SetLampMessage:

Программа:

Мой Питон:

Большая часть расхождений между шестнадцатеричными выходами связана с идентификацией и контрольными суммами. Мои идентификаторы всегда как-то равны 0x0001, но я не верю, что это проблема, потому что я смог отправить простые TCP-пакеты без ошибок, даже если все они имеют одинаковый идентификатор.

Я погуглил ошибки "TCP Retransmission", и кажется, что большинство из них происходит из-за того, что ACK не был отправлен обратно, я не думаю, что это также является причиной, потому что я установил различные времена паузы между каждым отправленным пакетом в убедитесь, что мои пакеты отправляются слишком быстро.

Есть ли у просветленного человека представление о том, что я делаю, чтобы вызвать эти ошибки?

1 ответ1

0

После некоторой работы я обнаружил, что моя проблема заключается в номерах последовательностей и подтверждений в заголовках TCP отправляемых пакетов. Я отправлял "0x0001" для обоих этих значений.

Я особенно нашел эту статью очень полезной в понимании того, как работают эти значения:http://www.firewall.cx/networking-topics/protocols/tcp/134-tcp-seq-ack-numbers.html

Чтобы решить мою проблему, я просмотрел номера Seq и Ack между настольным телефоном Cisco и диспетчером вызовов. Затем я бы предсказал и вычислил следующие значения Seq и Ack, а затем отправил свои пакеты соответствующим образом.

Вы можете видеть на изображении выше, что мои "Skinny" сообщения, начиная с "SetLampMessage", больше не получают ошибку повторной передачи TCP.

Однако мой телефон Cisco не отвечает и продолжает ненавидеть меня, но это не относится к делу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .