gpt4 book ai didi

python /dpkt : Find out if packet is a tcp packet or a udp packet ,

转载 作者:太空狗 更新时间:2023-10-29 20:16:10 27 4
gpt4 key购买 nike

我有一个 python 脚本,它使用 dpkt 捕获以太网上的数据包,但我如何区分哪些数据包是 tcp,哪些是 udp。

最终,我希望获得在时间间隔内建立的每个 tcp 连接的数据包列表。

我的代码是:

import dpkt
import pcapy
cap=pcap.open_live('eth0',100000,1,0)
(header,payload)=cap.next()
while header:
eth=dpkt.ethernet.Ethernet(str(payload))
ip=eth.data
tcp=ip.data
# i need to know whether it is a tcp or a udp packet here!!!
(header,payload)=cap.next()

最佳答案

IP 头包含字段协议(protocol)。 dpkt 应该允许您获取此值并使用它您可以猜测 IP 之上的内容。这是有效协议(protocol)编号的列表 http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml .UDP 等于 17 而 TCP 等于 6。

编辑:我检查了这个问题,正如我提到的,dpkg 提供 p 属性来访问 IP 的协议(protocol)字段。所以你可以再次检查它。但它也会自动解析数据包并将 data 属性设置为代表 UDP 或 TCP 等上层协议(protocol)的类的实例。因此,您可以检查 data 属性的类型,并且您可以识别此协议(protocol)。

from dpkt.ip import IP, IP_PROTO_UDP
from dpkt.udp import UDP
ip = IP('E\x00\x00"\x00\x00\x00\x00@\x11r\xc0\x01\x02\x03\x04\x01\x02\x03\x04\x00o\x00\xde\x00\x0e\xbf5foobar')
#if ip.p == IP_PROTO_UDP: # checking for protocol field in ip header
if type(ip.data) == UDP : # checking of type of data that was recognized by dpkg
udp = ip.data
print udp.sport
else:
print "Not UDP"

关于 python /dpkt : Find out if packet is a tcp packet or a udp packet ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8849635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com