2011-12-22 172 views
4

有沒有一種方法可以在不使用shell腳本的情況下以編程方式查詢iptables?我沒有使用shell腳本來運行iptables命令和grep輸出的自由。是否有使用GNU C的本地(API)級別訪問iptables?至少我想查詢iptables的默認策略。如何以編程方式訪問iptables?

我希望能使用/ proc文件系統,但我不認爲它implemented yet.

+0

這種問題的常見答案是嘗試「strace」或「ltrace」命令,例如, 'strace iptables -L' – 2011-12-22 11:24:03

+1

可能重複的[我怎樣才能以編程方式管理iptables規則?](http://stackoverflow.com/questions/109553/how-can-i-programmatically-manage-iptables-rules-在運行中) – 2015-03-06 23:24:43

回答

0

正如我在評論說,通過ltrace -ing iptables -L,我富爾德,有一個iptables-dev包在我的Debian/Sid與libipq和相關的庫。你可能會想使用它。

0

嗯,他爲什麼shouln't看看iptables來獲得的來源一個主意?我不明白爲什麼要使用strace來判斷源代碼是否包含所需的代碼。

5

您可以用iptables庫接口稱爲libiptc

那怎麼我創建了我的Perl接口iptablesCPAN IPTables::libiptc

libiptc庫只給你一個API基本結構。 訪問和解析個人規則是有點複雜,因爲它取決於個人目標/匹配模塊的共享庫的dyn-loading

我在我的CPAN module的做法是,我曾與do_command()iptables.c鏈接,這樣做規則變化。

你需要知道的另一件事是

單個iptables呼叫,請執行以下操作:

  1. 複製從內核的整個規則集用戶空間
  2. libiptc解析它
  3. 執行一個或多個更改(通常只需通過iptables cmd更改一次)
  4. 通過libiptc將其轉換爲內核blob格式
  5. 將整個(新)規則集從用戶空間複製到內核。

因此,一個沉重的過程,如果你只是每次都做一個單獨的更改。 但是你也可以使用它來獲得優勢,並且一次執行許多更改,並且通過/爲內核顯示爲單個原子更改。

+0

請注意,命令:'iptables-restore'使用智能方法在將更改提交到內核之前進行許多更改。 – NetOptimizer 2012-10-01 19:01:30