这段C代码该怎么修改,请给我看下

#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