Есть ли Python-интерфейс для iptables? - PullRequest
13 голосов
/ 05 мая 2011

Я пытаюсь получить текущие цепочки iptables, настроенные в системе, через python. Если я связываю команду 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
>>> 

Это просто невозможно?

1 Ответ

19 голосов
/ 05 мая 2011

Вы видели python-iptables ?

Python-iptables предоставляет привязки python к iptables в Linux. Взаимодействие с iptables достигается с помощью библиотек iptables C (libiptc, libxtables и расширений iptables), без вызова двоичного файла iptables и анализа его вывода.

...