如何检查替补功能的选项

问题描述

当前正在做一些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地址。请改正我使用的任何术语,因为我认为这是我找不到问题答案的原因。谢谢您的时间。

解决方法

您有几种选择:

>>> 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()对象)