我正在编写一个Python脚本,从DHCP数据包中提取数据。目前,我的一部分输出只是from DHCP选项的列表:
[('message-type',3),('param_req_-list',b'\x01y\x01\x01\x011\aaa\,'),('max\u dhcp\'u size',1500),('client_id',b'\x01(\aaa\aa1A\aa1O'),('requested_addr','192.168.1.4'),('server\'id','192.168.1.1',('hostname',b'hostname')]
我只想打印消息类型、主机名和请求的地址。从何处开始将其转换为元组,以便过滤掉元素?在
编辑: 我的产量在上面。 我的代码是:
from scapy.all import *
from scapy.layers import dhcp
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
runtime = logging.getLogger('scapy.runtime')
runtime.setLevel(logging.ERROR)
loading = logging.getLogger('scapy.loading')
loading.setLevel(logging.ERROR)
from scapy.layers.l2 import Ether
from scapy.layers.all import BOOTP
from scapy.layers.all import DHCP, DHCPTypes, DHCPOptions, DHCPRevOptions
from scapy import route
s=socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0800))
print("Input network interface")
interface = input()
def pkt_data(pkt):
src_mac = pkt.getlayer(Ether).fields['src']
dhcp_options = filter(lambda o: type(o) is tuple,
pkt.getlayer(DHCP).fields['options'])
print(src_mac)
print(list(dhcp_options))
sniff(iface=interface, prn=pkt_data, filter='udp port (67 or 68)', store=0)
假设要解析的字符串看起来(并且看起来)像有效的python数据strict,那么可以使用
python
的内部工具来解析它literal_eval将字符串解析为python数据结构(更安全的是
eval
)。dict
从中构造出方便的字典。在也许,这不是过滤的最佳解决方案,真的,但它会起作用的。下面的代码将您的列表转换为字典(直接,感谢@Slam提醒)并为字典取一个值。在
这段代码一点都不是最优的,但可能会给您一些想法。在
相关问题 更多 >
编程相关推荐