Как я могу преобразовать список в scapy.plist.PacketList в коде Py3? - PullRequest
0 голосов
/ 04 апреля 2020

я использую pkts = rdpcap('./xxx.pcap') для получения pkts в xxx.pcap, как я и ожидал, его тип должен быть scapy.plist.Packet, но после rd он был преобразован в тип list, в то время как элемент списка не может быть передан как pkts[IP], мой код выглядит следующим образом:

print(type(pkts))
myfunc(pkts)

и myfun c выглядит следующим образом:

def myfunc(pkts, src_ip):
    if src_ip is not None:
        print(pkts[0].show())

        try: 
            pkts = pkts[IP].filter(lambda  x:x[IP].src in ipnet(src_ip))
        expect:
            raise TypeError
    return pkts

, когда я бегу, он поднимает:

Traceback (most recent call last):
  File "parser.py", line 89, in ip_filter
    pkts = pkts[IP].filter(lambda  x:x[IP].src in ipnet(src_ip))
TypeError: list indices must be integers or slices, not Packet_metaclass

i pnet равен IPy.iP,

, теперь я знаю, что мне нужно преобразовать тип list в scapy.plist.PacketList, но как я могу это сделать?

1 Ответ

0 голосов
/ 07 апреля 2020

спасибо за Росса, я понял, потому что python3 сбросит тип pkts с scapy.plist.PacketList до list, поэтому нам нужно использовать PacketList(pkts) scapy здесь, например:

   def func2(pkts):
       pkts=PacketList(pkts)
       packet's process code.
   def func1():
       pkts=rdpcap('xxx.pcap')
       func2(pkts)

потому что я не очень хорош в английском sh, я не знаю, понятно ли это, что выше ** изд.

...