我想在這裏做一個程序,阻止一個IP地址給定的IP地址作爲輸入字符串,即使該程序在後臺執行,參數似乎通過不正確。執行IPtables通過C執行()
我試圖執行以下使用我的功能:
iptables -A INPUT -p tcp --dport 21 -s xxx.xxx.xxx.xxx -j DROP
我通過手動輸入它的命令行嘗試的命令,並在那裏工作,但我的計劃似乎並沒有處理該命令的方式相同。如何修復我的功能,以便程序發出參數,如上面的示例命令中所示?我也想避免使用system()
呼叫。
這裏是我的功能:
function blockip(char* ip){
char parameter[500];
sprintf(parameter,"-s %s",ip);
char*args[20]={"-A INPUT","-p tcp --dport 21",parameter,"-j DROP",NULL};
int stat,pid=fork();
if (pid==0){
execvp("iptables",args);
}
waitpid(pid,&stat,0);
}
'-A INPUT'是兩個參數,而不是一個。其餘的一樣。 – immibis
另外要注意的是,如果'execvp'失敗(可能是因爲沒有安裝iptables),你的程序就會開始變得非常奇怪,因爲孩子會開始做與父母相同的東西。 – immibis