如何使用 python 的 pynetfilter_conntrack 库

how to use pynetfilter_conntrack library of python

我正在尝试编写一个 python 程序来列出已建立的 TCP 连接。我找到了 pynetfilter_conntrack 模块。我已经使用 pip install pynetfilter_conntrack 安装了。导入库时出现如下错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pynetfilter_conntrack/__init__.py", line 4, in <module>
    from pynetfilter_conntrack.func import *
  File "/usr/local/lib/python2.7/dist-packages/pynetfilter_conntrack/func.py", line 6, in <module>
    library = cdll.LoadLibrary("libnetfilter_conntrack.so.1")
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: libnetfilter_conntrack.so.1: cannot open shared object file: No such file or directory

并使用命令修复

sudo ln -s  /usr/lib/libnetfilter_conntrack.so.3.1.3 /usr/lib/libnetfilter_conntrack.so.1

我进行了搜索,但找不到有关如何将其与某些示例程序一起使用的文档。此外,它的 wiki 站点目前已关闭。

http://software.inl.fr/trac/trac.cgi/wiki/pynetfilter_conntrack.

网页已关闭 due the finishing of sponsored development. But there is a new maintainer github 试图阻止库的最终死亡。

正如我所看到的,这个 repo (0.5) 版本目前正在开发中,但是有一个 example 这将给你使用甚至 0.4.2 版本的关键想法。

from netifaces AF_INET
import pynetfilter_conntrack

# Print source ip, port and sent bytes
ct = pynetfilter_conntrack.Conntrack()
for item in ct.dump_table(AF_INET):
    print item.orig_ipv4_src, item.orig_port_src, item.repl_counter_bytes

Alexander 的回答真的很有帮助。但不幸的是,这对我不起作用。所以,我用谷歌搜索并修改了上面的代码(可能是 pynetfilter_conntrack 的不同版本)。

import netifaces
import pynetfilter_conntrack

# Print source ip, port and sent bytes
ct = pynetfilter_conntrack.Conntrack()
'''
ct.dump_table(netifaces.AF_INET)--> returns the 2 values of tuple. one is list of objects and another is number of connections I guess. So the bellow change
'''
for item in ct.dump_table(netifaces.AF_INET)[0]:
   print item.orig_ipv4_src, item.orig_port_src, item.repl_counter_bytes

谢谢!