#python #pcap
#python #pcap
Вопрос:
Я пытаюсь отладить чужой код. Я тоже не программист на python, так что будьте осторожны.
У меня возникли проблемы с вызовом open_live в модуле pcap. В конце следует трассировка. Проблема в том, что open_live имеет список аргументов (char *, int, int, int), но в /usr/lib/python2.7/dist-packages/pcap.py список аргументов — это (self, *args). Таким образом, список аргументов того, что вызывается, не соответствует тому, что доступно. Не уверен, что это несоответствие в версиях или что. Что здесь происходит? Спасибо,
Sep 14 22:03:46 raspberrypi weewx[11938] ERROR weewx.engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.TypeError'>)
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** Traceback (most recent call last):
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** File "/usr/share/weewx/weewx/engine.py", line 103, in setupStation
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** self.console = loader_function(config_dict, self)
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** File "/usr/share/weewx/user/interceptor.py", line 225, in loader
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** return InterceptorDriver(**config_dict[DRIVER_NAME])
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** File "/usr/share/weewx/user/interceptor.py", line 2208, in init
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** self._device = self.DEVICE_TYPES.get(self._device_type)(**stn_dict)
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** File "/usr/share/weewx/user/interceptor.py", line 584, in init
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** WUClient.Parser(), handler=WUClient.Handler, **stn_dict)
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** File "/usr/share/weewx/user/interceptor.py", line 283, in init
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** iface, pcap_filter, promiscuous)
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** File "/usr/share/weewx/user/interceptor.py", line 325, in init
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** self.sniffer.open_live(iface, snaplen, pval, timeout_ms)
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** File "/usr/lib/python2.7/dist-packages/pcap.py", line 108, in open_live
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** def open_live(self, *args): return _pcap.pcapObject_open_live(self, *args)
Sep 14 22:03:46 raspberrypi weewx[11938] CRITICAL weewx.engine: **** TypeError: in method 'pcapObject_open_live', argument 2 of type 'char *'
Функция для этого приведена ниже. Весь код составляет почти 2700 строк.
def __init__(self, iface, pcap_filter, promiscuous):
self.running = False
self.data_buffer = ''
self.sniffer_type = None
self.sniffer_version = 'unknown'
self.sniffer = None
snaplen = 1600
timeout_ms = 100
pval = 1 if weeutil.weeutil.to_bool(promiscuous) else 0
loginf("sniff iface=%s promiscuous=%s" % (iface, pval))
loginf("sniff filter '%s'" % pcap_filter)
import pcap
try:
# try pylibpcap
self.sniffer = pcap.pcapObject()
self.sniffer.open_live(iface, snaplen, pval, timeout_ms)
self.sniffer.setfilter(pcap_filter, 0, 0)
self.sniffer_type = 'pylibpcap'
except AttributeError:
# try pypcap
self.sniffer = pcap.pcap(iface, snaplen, pval)
self.sniffer.setfilter(pcap_filter)
self.sniffer_type = 'pypcap'
self.sniffer_version = pcap.__version__.lower()
loginf("%s (%s)" % (self.sniffer_type, self.sniffer_version))
Комментарии:
1. Если вы добавите свой код в свой вопрос, вам будет легче помочь.
2. добавлена функция с кодом.
Ответ №1:
Что действительно сработало для меня, так это использование pypcap вместо libpcap. Поэтому удалите рекомендуемый «python-libpcap» и установите вместо него «python-pypcap».
Комментарии:
1. Я обнаружил, что установлен ‘python-pypcap’. Я не нашел ‘python-libcacp’. Самыми близкими были ‘python-pcapy’ и ‘python-libpcap’. Может ли это быть одним из них? Спасибо
2. Извините, моя ошибка …., неправильно написано — да, это последний > python-libpcap