问题描述
当前正在做一些Python编程,遇到一个我找不到答案的问题。可能是不好的Google搜索...无论如何,我有这样的事情
# Construct the DNS packet
DNSpkt = DNS(
id=pkt[DNS].id,# use same id from captured packet
qd=pkt[DNS].qd,# copy the question section from packet
aa=1,# Set flag for authoritative message
qr=1,# Set flag for reply message
qdcount=1,# one question
ancount=1,# one answer
an=Anssec) # my bogus answer is set in reply
我想知道如何查看DNS等功能所需要的选项。还有其他的
IPpkt = IP(dst=pkt[IP].src,src=pkt[IP].dst)
UDPpkt = UDP(dport=pkt[UDP].sport,sport=53)
例如,IP有dst和src作为选项。我想知道,如果我看到的只是IP(),我将如何知道。我想知道这些选项也可以使用。例如,dst使用一个ipv4地址。请改正我使用的任何术语,因为我认为这是我找不到问题答案的原因。谢谢您的时间。
解决方法
您有几种选择:
- 来自参考文档:例如IP:https://scapy.readthedocs.io/en/latest/api/scapy.layers.inet.html#scapy.layers.inet.IP其中包含很多信息。
- 从控制台:下载scapy并使用
./run_scapy
,然后执行ls(IP)
>>> ls(IP) version : BitField (4 bits) = (4) ihl : BitField (4 bits) = (None) tos : XByteField = (0) len : ShortField = (None) id : ShortField = (1) flags : FlagsField (3 bits) = (<Flag 0 ()>) frag : BitField (13 bits) = (0) ttl : ByteField = (64) proto : ByteEnumField = (0) chksum : XShortField = (None) src : SourceIPField = (None) dst : DestIPField = (None) options : PacketListField = ([])
- 此外,您可以使用
rfc(IP)
,但请注意,该名称已经显示在在线文档中,并且纯粹是提供信息,因为所有名称均大写。
,>>> rfc(IP) 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |VERSION| IHL | TOS | LEN | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID |FLAGS| FRAG | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TTL | PROTO | CHKSUM | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SRC | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DST | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTIONS | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. IP
也许这就是您所需要的-
In [33]: DNSpkt.fields
Out[33]: {'aa': 1,'an': 'Anssec','ancount': 1,'qdcount': 1,'qr': 1}
(缺少pkt,因为我没有使用它实例化DNS()对象)