擅长:python、mysql、java
<p>IP头包含字段协议。dpkt应该允许您获得这个值,并使用它您可以猜测什么是在IP之上。这是有效协议编号<a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml">http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml</a>的列表。
UDP等于17,而TCP为6。</p>
<p>编辑:
我已经检查过这个问题,正如我提到的,dpkg提供了<code>p</code>属性来访问IP的protocol字段。所以你可以再查一遍。但它也会自动解析数据包,并将<code>data</code>属性设置为表示UDP或TCP等上层协议的类的实例。所以您可以检查<code>data</code>属性的类型并识别此协议。</p>
<pre><code>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"
</code></pre>