#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:
У вас есть несколько вариантов:
- из справочного документа: например, 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
Комментарии:
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.