Python 在使用 Scapy 创建空 pcap 文件时抑制警告
Python supress warnings while creating a empty pcap file with Scapy
我想创建一个空的 pcap
文件。我正在使用 'Scapy' 的 wrpcap
模块。但是 wrpcap
恰好采用 2 arguments
:一个是 file name
,另一个是 packet list
,例如:
wrpcap("my.pcap",my_pkt_list)
因为我想创建一个空的并且我没有数据包列表,所以我正在向 pcap
文件写入一个空字符串。这是在创建文件,但也会给出警告和错误,因为字符串与数据包类型不匹配。
WARNING: PcapWriter: unknown LL type for str. Using type 1 (Ethernet)
Traceback (most recent call last):
File "test.py", line 35, in <module>
wrpcap("pcap/FU.pcap","")
File "/usr/lib/python2.7/site-packages/scapy/utils.py", line 466, in wrpcap
PcapWriter(filename, *args, **kargs).write(pkt)
File "/usr/lib/python2.7/site-packages/scapy/utils.py", line 646, in write
self._write_packet(pkt)
File "/usr/lib/python2.7/site-packages/scapy/utils.py", line 688, in _write_packet
sec = int(packet.time)
AttributeError: 'str' object has no attribute 'time'
目前,我可以使用 try and except
抑制错误,但无法抑制警告。
代码
from scapy.all import *
try:
wrpcap("my.pcap","")
except:
pass
警告仍然存在:
WARNING: PcapWriter: unknown LL type for str. Using type 1 (Ethernet)
如何从 python 代码中抑制它?
文本 "WARNING: ..." 不是异常的一部分,因此不会被您的 try 子句压制。
我的一个想法是在调用期间重定向标准输出
from scapy.all import *
try:
old_stdout = sys.stdout
sys.stdout = None
wrpcap("my.pcap","")
sys.stdout = old_stdout
except:
pass
应该抑制调用期间的所有输出
Python 在标准库中有一个用于抑制警告的内置方法:
import warnings
warnings.simplefilter("ignore", Warning)
您可以阅读有关警告库的更多信息 in the docs。
编辑
看起来 scapy
没有使用 warnings
库来生成它。相反,它 logs them to a logger 调用了 scapy.runtime
,级别为 warning
。显然有一些默认的日志记录配置可以将其回显到 stdout
。您可以为 scapy.runtime
添加自己的日志处理程序来抑制它们。
您可以使用 scapy 的 PcapWriter
方法来避免该警告。
from scapy.all import *
try:
writer=PcapWriter("my.pcap")
except:
pass
这将创建您的空 pcap 文件。当你想向它写入一些数据包时,只需使用以下代码:
writer.write(<Your_packets>)
writer.flush()
我想创建一个空的 pcap
文件。我正在使用 'Scapy' 的 wrpcap
模块。但是 wrpcap
恰好采用 2 arguments
:一个是 file name
,另一个是 packet list
,例如:
wrpcap("my.pcap",my_pkt_list)
因为我想创建一个空的并且我没有数据包列表,所以我正在向 pcap
文件写入一个空字符串。这是在创建文件,但也会给出警告和错误,因为字符串与数据包类型不匹配。
WARNING: PcapWriter: unknown LL type for str. Using type 1 (Ethernet)
Traceback (most recent call last):
File "test.py", line 35, in <module>
wrpcap("pcap/FU.pcap","")
File "/usr/lib/python2.7/site-packages/scapy/utils.py", line 466, in wrpcap
PcapWriter(filename, *args, **kargs).write(pkt)
File "/usr/lib/python2.7/site-packages/scapy/utils.py", line 646, in write
self._write_packet(pkt)
File "/usr/lib/python2.7/site-packages/scapy/utils.py", line 688, in _write_packet
sec = int(packet.time)
AttributeError: 'str' object has no attribute 'time'
目前,我可以使用 try and except
抑制错误,但无法抑制警告。
代码
from scapy.all import *
try:
wrpcap("my.pcap","")
except:
pass
警告仍然存在:
WARNING: PcapWriter: unknown LL type for str. Using type 1 (Ethernet)
如何从 python 代码中抑制它?
文本 "WARNING: ..." 不是异常的一部分,因此不会被您的 try 子句压制。
我的一个想法是在调用期间重定向标准输出
from scapy.all import *
try:
old_stdout = sys.stdout
sys.stdout = None
wrpcap("my.pcap","")
sys.stdout = old_stdout
except:
pass
应该抑制调用期间的所有输出
Python 在标准库中有一个用于抑制警告的内置方法:
import warnings
warnings.simplefilter("ignore", Warning)
您可以阅读有关警告库的更多信息 in the docs。
编辑
看起来 scapy
没有使用 warnings
库来生成它。相反,它 logs them to a logger 调用了 scapy.runtime
,级别为 warning
。显然有一些默认的日志记录配置可以将其回显到 stdout
。您可以为 scapy.runtime
添加自己的日志处理程序来抑制它们。
您可以使用 scapy 的 PcapWriter
方法来避免该警告。
from scapy.all import *
try:
writer=PcapWriter("my.pcap")
except:
pass
这将创建您的空 pcap 文件。当你想向它写入一些数据包时,只需使用以下代码:
writer.write(<Your_packets>)
writer.flush()