首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python / dpkt:确定数据包是tcp数据包还是udp数据包,

python / dpkt:确定数据包是tcp数据包还是udp数据包,
EN

Stack Overflow用户
提问于 2012-01-13 19:08:06
回答 2查看 23.3K关注 0票数 9

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

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

我的代码是:

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-13 20:57:52

IP报头包含字段协议。dpkt应该允许您获得此值,并使用它可以猜测IP的顶部是什么。以下是有效协议号http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml的列表。UDP等于17,而TCP等于6。

编辑:我已经检查了这个问题,正如我所提到的,dpkg提供了p属性来访问IP的协议字段。这样你就可以检查一下了。而且它还自动解析分组并将data属性设置为表示诸如UDP或TCP之类上层协议的类的实例。因此您可以检查data属性类型,并识别此协议。

代码语言:javascript
复制
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"
票数 10
EN

Stack Overflow用户

发布于 2012-04-05 15:22:36

一个python脚本,使用dpkt捕获以太网适配器eth0上的数据包,并区分TCPIP的UDP数据包。

代码语言:javascript
复制
import dpkt
import pcapy

cap=pcapy.open_live('eth0',100000,1,0)
(header,payload)=cap.next()

while header:
    eth=dpkt.ethernet.Ethernet(str(payload))

    # Check whether IP packets: to consider only IP packets 
    if eth.type!=dpkt.ethernet.ETH_TYPE_IP:
            continue
            # Skip if it is not an IP packet
    ip=eth.data
    if ip.p==dpkt.ip.IP_PROTO_TCP: # Check for TCP packets
           TCP=ip.data 
           # ADD TCP packets Analysis code here
    elif ip.p==dpkt.ip.IP_PROTO_UDP: # Check for UDP packets
           UDP=ip.data 
           # UDP packets Analysis code here

    (header,payload)=cap.next()
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8849635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档