#include
#include
#include
#include
int main(int agrc,char* argv[])
{
uid_t uid ,euid;
uid = getuid() ;
euid = geteuid();
if(setreuid(euid, uid)) //交换这两个id
perror("setreuid");
char buf[500];
sprintf(buf,"iptables -A INPUT -p tcp -s %s --dport 3306 -j ACCEPT",argv[1]);
system(buf); //执行iptables -L命令
return 0;
}
上面这段源码该如何改,编译后是我需要的。
比如编译后程序名为: ip
提交参数为:'iptables --line -vL'
编译后执行格式为: ip 'iptables --line -vL'
单引号是干什么的,这整个是个错误的语法
你应该换成双引号,“iptables --line -vL”把这些当成一个参数传进来
那么argv[1]就肯定不对了,要改成argv[0]
iptables 设置防火墙规则的命令有问题:
选择协议为ALL时,不能再设置源端口和目的端口参数了
我猜测你想传的参数应该就是一个IP地址吧?
假如你的可执行程序叫ip,那么你在执行的时候只需要输入以下内容:
./ip xxx.xxx.xxx.xxx