如何验证表中捕获的传入空字段
Posted
技术标签:
【中文标题】如何验证表中捕获的传入空字段【英文标题】:How to valid the captured incoming empty field in a table 【发布时间】:2022-01-21 21:33:59 【问题描述】:代码中的问题是,如果一个字段被遗漏,则会引发错误,如果我排除错误,则它不会显示任何内容
import pyshark
from tabulate import tabulate
capture = pyshark.FileCapture('/home/sipl/Downloads/DHCP.cap', display_filter='udp.port eq 67')
# capture2 = pyshark.LiveCapture(interface='wlo2', display_filter='arp')
d = dict()
for packet in capture:
try:
d['mac'] = packet.dhcp.hw_mac_addr
d['hname'] = packet.dhcp.option_hostname
d['vend'] = packet.dhcp.option_vendor_class_id
except AttributeError:
pass
try:
d['srvrid'] = packet.dhcp.option_dhcp_server_id
d['smask'] = packet.dhcp.option_subnet_mask
d['DNS'] = packet.dhcp.option_domain_name_server
d['Domain'] = packet.dhcp.option_domain_name
except AttributeError:
pass
try:
d['ip'] = packet.dhcp.option_requested_ip_address
except AttributeError:
pass
try:
table = 'Mac': [d['mac']], 'IP': [d['ip']], 'host': [d['hname']],'vendor': [d['vend']], 'Server id': [d['srvrid']],
'Sub mask': [d['smask']], 'DNS': [d['dns']], 'Domain': [d['Domain']]
print(tabulate(table, headers='keys'))
except KeyError:
continue
我希望如果缺少一个字段,那么它将我收到的传入字段存储在一个数据包中并显示在表格中,对于空字段它不显示任何内容并将该字段留在表格中。 基本上我希望它存储传入字段并在表中打印,并且不会为丢失的字段引发错误。 我现在在 fileCapture 上尝试检查工作,但我需要在 liveCapture 上执行此操作
【问题讨论】:
【参考方案1】:如果我对你的理解正确,你不想得到属性错误,而是在字段缺失时输入一个空值。
您可以通过使用getattr
函数检查值来做到这一点。
所以我不知道 dhcp
到底是什么,以及它是否丢失或始终存在,只有后面的内容才会丢失。
但是可以说 dhcp 始终存在,并且您指向的实际字段可能会丢失:
-
创建一个名为:
get_value_or_none(obj, key, default='') -> str
的函数
现在让我们使用getattr
来实现它。
def get_value(obj, key, default='') -> str:
return getattr(obj, key, default=default)
现在通过用函数调用包装调用来替换您在代码中所做的所有对应分配:
即:get_value(packet.dhcp, 'option_domain_name')
就是这样,它应该可以工作。
PS。如果dhcp
并不总是存在,您也必须对其执行相同的操作。
【讨论】:
我不明白该怎么做 1.创建我上面建议的功能。 2.替换直接赋值,例如d['ip'] = packet.dhcp.option_requested_ip_address
改为d['ip'] = get_value(packet.dhcp, 'option_requested_ip_address')
【参考方案2】:
我是用方法做到的:
dictionary.get()
【讨论】:
以上是关于如何验证表中捕获的传入空字段的主要内容,如果未能解决你的问题,请参考以下文章