2012-08-29 8 views
0

Я пытаюсь реализовать сетевой снифер, используя библиотеку JPCap.JPCap - can not capture TCP-пакеты

Проблема в том, что она захватывает только UDP-пакеты других узлов. Пакеты TCP не захватываются. (На самом деле TCP пакеты моего компьютера только в настоящее время понюхали)

Это код, я использую:

captor=JpcapCaptor.openDevice(interfaceList[interfaceNumber], 65535, true, 20); 
captor.setFilter("ip and tcp",true); 


JpcapWriter writer=JpcapWriter.openDumpFile(captor,"pass.txt"); 

for(int i=0;i<10;i++){ 
     //capture a single packet 
     Packet packet=captor.getPacket(); 
     //save it into the opened file 
     writer.writePacket(packet); 

    } 
writer.close(); 

ответ

0

ли UDP пакетов от других узлов, которые вы видите, посылаемые на трансляцию MAC адрес (ff: ff: ff: ff: ff: ff)? Если это так, то проблема заключается не в том, что вы можете захватывать UDP-пакеты, а не через TCP-пакеты, проблема в том, что вы не можете захватывать непереданные пакеты с других хостов (UDP-пакеты могут быть широковещательными пакетами, но большинство из них не являются; TCP-пакеты никогда не являются широковещательными пакетами).

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

Если это так, то проблема может заключаться в том, что вы находитесь в коммутируемой сети. См. the CaptureSetup/Ethernet page on the Wireshark Wiki для получения подробных сведений о том, что вам нужно сделать, чтобы захватить «сторонний» трафик в коммутируемой сети Ethernet.