TCP和UDP中是否有scapy常量?

时间:2016-02-25 12:46:13

标签: constants scapy

TCP和UDP的scapy中是否存在常量?

我的意思是

TCP=6, UDP=17 

等...

2 个答案:

答案 0 :(得分:1)

<强> A) 查找IP的{​​{3}},我们发现IP.protoByteEnumField("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
>>>