我正在写一个从DHCP数据包中提取数据的Python脚本。目前,我的输出的一部分只是来自DHCP选项的列表:从DHCP选项列表中提取数据
[('message-type',3),('param_req_list',b'\ x01y \ x01 \ x01 \ x011 \ aaa_ '',''max_dhcp_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格式。 (编辑:所以我不知道如何,但我觉得Python的REPL必须是一个简单的解决方案) –
这是终端的输出。我只需要输出只是我想要的价值,而不是全部。然后我可以将其存储到数据库中。 – dcode1
我已经向您展示了如何将该字符串转换为元组列表。将现在的输出捕获为字符串,然后使用exec将其转换为您可以解析的元组列表。 –