Чтение полного пакета с использованием Python Raw Socket - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь создать необработанный сокет для пакетов UDP только для переадресации IP, используя таблицу пересылки. Я не являюсь экспертом в программировании необработанных сокетов, и меня интересует, как обеспечить полный пакет UDP в буфере.

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind(('0.0.0.0', 1337))
while True:
    packet = s.recvfrom(65535) #how to know that I read the complete packet not 50% or 1 and half packet 
    forwared_packet_function(packet) #here I will parse the packet change ip header and update the IP table and forward the packet

Можно ли сказать мне, как я могу прочитать один полный пакет по recvfrom()?

1 Ответ

0 голосов
/ 05 мая 2018

Я не эксперт в программировании сокетов, но у меня есть некоторые знания о сети.

1-й вопрос:

как узнать, что я прочитал полный пакет, а не 50% или 1 и половину пакета?

Ответ: Вы не можете. Он не имеет «порядковый номер» или «номер подтверждения», как TCP.

2-й вопрос:

Можно ли сказать мне, как я могу прочитать один полный пакет с помощью recvfrom ()?

Ответ: давай попробуем

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind(('0.0.0.0', 1337))
while True:
    packet = s.recvfrom(65535).decode()    #decode packet
    forwared_packet_function(packet)
    print(packet)   #print packet to read
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...