【发布时间】:2011-08-19 00:08:01
【问题描述】:
我正在尝试通过 python 检索系统上配置的当前 iptables 链。如果我 strace iptables 命令,它会输出:
strace iptables -L INPUT
socket(PF_INET, SOCK_RAW, IPPROTO_RAW) = 3
getsockopt(3, SOL_IP, 0x40 /* IP_??? */, "filter\0\377`\2\351\1\0\210\377\377\210}\313\276\0\210\377\377\354\206\0\201\377\377\377\377"..., [84]) = 0
此处的完整输出:http://pastebin.com/e7XEsaZV
在 python 中,我创建了套接字 obj 并尝试调用 getsockopt 并出现错误:
>>> s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
>>> s.getsockopt(socket.SOL_IP, 0x40)
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
s.getsockopt(socket.SOL_IP, 0x40)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 22] Invalid argument
>>>
>>> s = socket.socket(2, socket.SOCK_RAW, socket.IPPROTO_RAW)
>>> s.getsockopt(socket.SOL_IP, 0x41)
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
s.getsockopt(socket.SOL_IP, 0x41)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 22] Invalid argument
>>>
这不可能吗?
【问题讨论】:
-
由于您的问题是关于
python,我删除了C标签。 -
我似乎错过了
iptables和您的python 套接字之间的关系......也许是一个愚蠢的问题,但您介意详细说明两者之间的关系吗? -
@Mike 我可能遗漏了一些重要的东西我只是想在 Python 中模拟 iptables 命令并查看 iptables 命令上的 strace,我假设(我不是真正的开发人员)是如何检索内核中配置的当前 iptables。我可能错了,但我没有看到任何 ioctls 等。
-
当您说模拟 iptables 时,您具体要在 python 中模拟什么?
标签: python linux sockets networking iptables