2012-03-29 2 views
0

Я запускаю серверное приложение на ПК, который получает UDP-пакеты от клиента. Получены пакеты UDP (проверены в WireShark), но включают неправильную контрольную сумму. Я не контролирую клиента и должен иметь возможность получать эти пакеты в Python. Следующий код не видит пакеты:Получение UDP-пакетов с неправильной контрольной суммой в Python

UDPSock = socket(AF_INET,SOCK_DGRAM) 
UDPSock.bind(addr) 

while 1: 
    data,addr = UDPSock.recvfrom(buf) 
    if not data: 
     print "Client has exited!" 
     break 
    else: 
     print "\nReceived message '", data,"'" 

UDPSock.close() 

Во всяком случае в Python я могу получать искаженные UDP-пакеты?

+0

Знаете ли вы, почему контрольная сумма ошибочна? Я имею в виду, что это должно быть обработано клиентом UDP. Код, который вы опубликовали, не видит пакеты, потому что его выбрасывает, вероятно, с помощью сетевого устройства подчеркивания, потому что контрольная сумма ошибочна, разрешите эту проблему. –

+1

Как вы ЗНАЕТ контрольную сумму? Wireshark, работающий в системе _sending_, часто (почти всегда, в настоящее время) сообщает о плохих контрольных суммах, потому что расчет контрольной суммы переносится на адаптер, и драйвер не беспокоится о контрольных суммах. Это известная псевдо-проблема. Однако, если вы получаете плохие контрольные суммы в системе _receiving_, это еще одна проблема. –

+0

Если вы действительно получаете плохие контрольные суммы, тогда нам понадобятся физические характеристики оборудования на обоих концах и по пути между двумя системами. –

ответ

0

Найдено решение.

Я использовал библиотеку pycap в сочетании с dpkt. Модуль pycap устарел, для более старых версий Python, но в «Проблемах» кто-то опубликовал обновленные двоичные файлы.

Смежные вопросы