Как проверить параметры для функций scapy

#python #scapy

#python #scapy

Вопрос:

В настоящее время занимаюсь программированием на 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(). Я хотел бы знать, какие варианты также нужны. Например, летнее время принимает ipv4-адрес. Пожалуйста, поправьте меня на любых условиях, которые я использую, поскольку я считаю, что именно по этой причине я не могу найти ответ на свой вопрос. Спасибо за ваше время.

Ответ №1:

У вас есть несколько вариантов:

 >>> 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
  

Комментарии:

1. Это ссылка на API .. приятно.. Я чувствую себя глупо. Спасибо вам за это! Что касается ./run_scapy, ls(IP) и rfc (IP), я не уверен, как их выполнить. Мне нужно объяснение ELI5 (объясните, как я 5). Спасибо за ваше время.

Ответ №2:

Может быть, это то, что вам нужно-

 In [33]: DNSpkt.fields
Out[33]: {'aa': 1, 'an': 'Anssec', 'ancount': 1, 'qdcount': 1, 'qr': 1}
  

(pkt отсутствует, потому что я не использовал его для создания экземпляра объекта DNS ())

Комментарии:

1. Где вы это ввели? Спасибо за комментарий. Это то, что я ищу, хотя и не совсем это. Я смог найти исходный код, который я искал, который ответил на многие вопросы.

2. Только в моем терминале Ipython. Создал объект DNS (…), а затем это. В Python есть хороший набор инструментов для расследования, таких как dir() и атрибуты, такие как `__doc__`, я обычно нахожу то, что ищу, используя их, а также опцию автозаполнения ipython.