2011-03-07 113 views

回答

12

要做到執行你需要使用像pynids http://jon.oberheide.org/pynids/ TCP重組。

您也可以使用pylibpcap,dpkt或scapy構建自己的。

TCP重組非常棘手,有很多邊緣情況。如果您需要一個強大的解決方案,我不會推薦自己做。

4

是的...... TCP協議保證應用程序層只會看到數據包按順序組裝。現在如果你正在談論構建一個解析IP數據包本身的低級接口,你可以用RAW sockets來刺探它,它應該能夠訪問IP頭信息。這裏有一個例子:

import socket 

# the public network interface 
HOST = socket.gethostbyname(socket.gethostname()) 

# create a raw socket and bind it to the public interface 
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) 
s.bind((HOST, 0)) 

# Include IP headers 
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) 

# receive all packages 
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) 

# receive a package 
print s.recvfrom(65565) 

# disabled promiscuous mode 
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF) 

從Python的插座模塊文檔無恥地舉起: http://docs.python.org/library/socket.html

+0

請注意這個例子只適用於Windows – lunixbochs 2011-03-07 06:15:16