2016-06-29 3 views
1

Я пишу скрипт в python2.7 на компьютере с Windows XP. Аппарат подключен к нескольким сетям с использованием разных сетевых карт. Я уже отвечал на вопрос, который имеет отношение к этому вопросу, но не напрямую обратиться к нему herePython не получит UDP-пакеты (не трансляция)

У меня есть сервер, который отправляет «данные о состоянии» через UDP на ~ 1-секундными интервалами

В Серверы Ip: 10,42 .40.34 My Machines IP: 10.31.9.0

Карту я использую: Intel (R) Gigabit CT Desktop Adapter

Я могу наблюдать пакеты «Серверы» (через wirehark), отправляемые на «Мой компьютер».

2995 19.592120 10.42.40.34 10.31.9.0 UDP 455 000000007e4e9ca700000000040404000301000000000100... Source port: 62415 Destination port: 62415 
3012 19.688119 10.42.40.34 10.31.9.0 UDP 455 000000007e4e9ca700000000040404000301000000000100... Source port: 62415 Destination port: 62415 

сокет создается без проблем:

self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

Однако, когда я привязать сокет к интерфейсу:

self.sock.bind(('10.31.9.0', 62415)) 

затем использовать (без набора тайм-аута):

reply, addr = self.sock.recvfrom(65535) 

для получения, мой сценарий просто ждет вызов метода recvfrom(). что подразумевает, что он не принимает пакеты. Хотя я подтвердил, что это через Wireshark.

Я действительно стучал головой о стену, любая помощь будет намного apreciated ...

Беллоу полный «статус» пакет вытащил из Wireshark, я думаю, может быть, некоторые из информации заголовка может быть плохими, и поэтому питон игнорирует это ... ИДК

0000 03 00 00 00 81 b5 02 00 00 2a 28 20 08 00 45 00 .........*(..E. 
0010 01 b8 1b 2b 40 00 01 11 17 a0 0a 2a 28 22 0a 1f [email protected]*(".. 
0020 09 00 f3 cf f3 cf 01 a4 00 00 00 00 00 00 7e 4e ..............~N 
0030 9c a7 00 00 00 00 04 04 04 00 03 01 00 00 00 00 ................ 
0040 01 00 3e 99 99 9a 01 01 00 00 00 00 00 00 00 00 ..>............. 
0050 00 00 00 00 00 00 00 00 00 00 3e 8c e7 04 3e 9c ..........>...>. 
0060 43 2d bf 17 5f 6e bf 17 5f 6e 00 00 00 00 00 00 C-.._n.._n...... 
0070 00 00 03 01 00 00 03 00 00 00 04 04 00 00 04 04 ................ 
0080 00 00 04 04 00 00 04 04 00 00 00 00 00 01 00 00 ................ 
0090 00 00 00 00 00 00 03 00 00 00 00 00 00 40 00 00 [email protected] 
00a0 00 00 40 90 00 00 40 86 4c cb 40 90 00 00 40 86 [email protected]@[email protected]@. 
00b0 4c cb bf 09 09 21 40 6a 57 4e 40 6a 57 4e 3f dc [email protected]@jWN?. 
00c0 b1 4e 3f dc b1 4e bf f7 fd 4e bf f7 fd 4e 3e 80 .N?..N...N...N>. 
00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
00e0 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 ................ 
00f0 00 0f 01 00 00 00 00 00 00 00 00 ee ee 00 00 00 ................ 
0100 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
01b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
01c0 00 00 79 c7 42 05 56        ..y.B.V 
+0

Вы создали сокет с 'socket.AF_INET' и' socket.SOCK_DGRAM'? – gurka

+0

Да, я отредактировал свой вопрос, чтобы отразить это ... – CytznX

+0

И, может быть, вы могли бы попробовать изменить буфер с '65535' на' 1', чтобы убедиться, что здесь ничего странного не происходит (возможно, он ждет полного буфера заполните) – gurka

ответ

0

Оказывается, пакеты, что мой «сервер» отправлял где не IP кашрут. поэтому они получают отказ в сетевом и транспортном уровнях. Решение заключалось в том, чтобы не использовать класс сокета python, а вместо этого напрямую связываться с OSI-L2 с использованием winpcap и ctypes

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