TCP和UDP的scapy中是否存在常量?
我的意思是
TCP=6, UDP=17
等...
答案 0 :(得分:1)
<强> A)强>
查找IP
的{{3}},我们发现IP.proto
是ByteEnumField("proto", 0, IP_PROTOS),
。这意味着,它会从IP_PROTOS
列表中获取仅加载您的操作系统/etc/protocols/
的值。所以你可以自己解析/etc/protocols
,或者已经加载了scapy,直接访问IP_PROTOS
对象:
>>> IP_PROTOS
</etc/protocols/ pim ip ax_25 esp tcp ah mpls_in_ip rohc ipv6_opts xtp st mobility_header dccp igmp ipv6_route igp ddp etherip wesp xns_idp ipv6_frag vrrp gre ipcomp encap ipv6 iso_tp4 sctp ipencap rsvp hip udp ggp hmp idpr_cmtp hopopt fc skip icmp pup manet isis rdp l2tp ipv6_icmp udplite egp ipip ipv6_nonxt eigrp idrp shim6 rspf ospf vmtp>
>>> IP_PROTOS.tcp
6
>>> IP_PROTOS.udp
17
>>> IP_PROTOS.ip
0
b)另一种方法是直接读取scapys图层绑定信息。当您(或scapy核心本身)调用bind_layers(lower,upper[,overload_fields])
时,这是添加到图层的信息。您可以按如下方式轻松阅读该信息:
>>> TCP.overload_fields
{<class 'scapy.layers.inet6.IPv6'>: {'nh': 6}, <class 'scapy.layers.inet.IP'>: {'frag': 0, 'proto': 6}}
意味着,如果TCP是IPv4的有效负载(scapy.layers.inet.IP
),它将覆盖IP.proto=6
。
这里有相同的UDP信息
>>> UDP.overload_fields
{<class 'scapy.layers.inet6.IPv6'>: {'nh': 17}, <class 'scapy.layers.inet.IP'>: {'frag': 0, 'proto': 17}}
供参考,implementation
答案 1 :(得分:0)
TCP和UDP是TCP / UDP数据包的启动器。 例如:
pack = IP(dst="www.google.com") / UDP(dport=80)
pack.show()
结果:
>>> pack = IP(dst="www.google.com") / UDP(dport=80)
>>> pack.show()
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= udp
chksum= None
src= 'Your local address'
dst= Net('www.google.com')
\options\
###[ UDP ]###
sport= domain
dport= http
len= None
chksum= None
>>>