[英]Extract Ethernet, IP header, TCP and payload from socket recv Python
如何從Python中的socket.recv中提取以太網,IP標頭,TCP和有效載荷現在,我可以使用socket.recvfrom()獲得以上信息:
packet = s.recvfrom(NETWORK_MAX_SIZE)
packet = packet[0]
#parse ethernet header
eth_length = 14
eth_header = packet[:eth_length]
eth = unpack('!6s6sH' , eth_header)
eth_protocol = socket.ntohs(eth[2])
t = iph_length + eth_length
tcp_header = packet[t:t+20]
#now unpack them :)
tcph = unpack('!HHLLBBHHH' , tcp_header)
source_port = tcph[0]
dest_port = tcph[1]
sequence = tcph[2]
acknowledgement = tcph[3]
doff_reserved = tcph[4]
tcph_length = doff_reserved >> 4
h_size = eth_length + iph_length + tcph_length * 4
data_size = len(packet) - h_size
#get data from the packet
data = packet[h_size:]
參考: http : //www.binarytides.com/python-packet-sniffer-code-linux/
當我通過碎片化的TCP數據包使用相同的功能並調用socket.recv()時,解包tcpheader時會出錯。
謝謝
謝謝,我認識到socket.recv()返回str類型, socket.recvfrom()返回元組類型,因此對於socket.recv()我省略了packet = packet [0]。 我將更新代碼以將TCP標頭處理為可變的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.