Создание пакета TCP с POX

79
8

Я пытаюсь создать TCP-пакет с контроллером POX и отправить его одному из ключей.

Так создается пакет:

        payload = "MESSAGE"
tcp_packet = tcp()
tcp_packet.srcport = 10000
tcp_packet.dstport = 10001
tcp_packet.payload = payload
tcp_packet.seq = 100

ipv4_packet = ipv4()
ipv4_packet.iplen = ipv4.MIN_LEN + len(tcp_packet)
ipv4_packet.protocol = ipv4.TCP_PROTOCOL
ipv4_packet.dstip = IPAddr('10.0.0.5')
ipv4_packet.srcip = IPAddr('10.0.0.1')
ipv4_packet.set_payload(tcp_packet)

eth_packet = ethernet()
eth_packet.set_payload(ipv4_packet)
eth_packet.dst = EthAddr('00:00:00:00:00:05')
eth_packet.src = EthAddr('00:00:00:00:00:01')
eth_packet.type = ethernet.IP_TYPE

Затем он отправляется через один из портов коммутатора. Когда я пытаюсь захватить пакет в обработчике PacketIn:

event.parsed.find('tcp')

возвращает None, как будто там нет пакета TCP. Захват трафика с помощью Wireshark, я вижу пакет (завернутый в пакет OF), но Wireshark предупреждает, что заголовок TCP равен нулю.

Это действительно проблема, с заголовком, и если это, как я могу это исправить?

спасибо

спросил(а) 2021-01-20T00:12:51+03:00 9 месяцев, 1 неделя назад
1
Решение
122

Проблема заключалась в том, что поле смещения данных не было установлено. Поскольку минимальная длина заголовка для TCP-пакета составляет 5 32-битных слов (20 байтов), и у меня нет параметров, заданных в заголовке. Поэтому, чтобы исправить это, мне пришлось добавить:

tcp_packet.off = 5

ответил(а) 2021-01-20T00:12:51+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема