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

📄 526.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="527.htm">下一篇</a>]
<hr><p align="left"><small>发信人: scz (小四), 信区: Security <br>

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

发信站: 武汉白云黄鹤站 (Mon Jul 24 22:05:30 2000), 站内信件 <br>

作者:小四 < mailto: scz@isbase.com > <br>

主页:http://www.isbase.com <br>

日期:2000-07-24 20:10 <br>

可能最好的帮助是源代码例子,准备用syn-flood为例说明libnet的使用。也是被人 <br>

抓去写DoS工具,就以这个题目灌水几篇吧。使用libnet的好处很多,考虑兼容性, <br>

libnet for NT/2K已经有下载。 <br>

首先我们介绍libnet_name_resolve()函数,顾名思义,该函数实现了域名解析功能。 <br>

其函数原型如下: <br>

u_long libnet_name_resolve ( u_char * hostname, u_short use_name ); <br>

hostname为标准的asciiz串,以NULL结尾。可以是点分十进制IPv4地址,比如 <br>

"192.168.8.30"。可以是FQDN,比如"bbs.isbase.com"。甚至可以是一般的主机名, <br>

只要你确信该主机名可以经过域名系统(包括/etc/hosts文件)得到正向解析。在头文 <br>

件/usr/include/libnet/libnet-macros.h中有两个宏对应了use_name的取值: <br>

#define LIBNET_DONT_RESOLVE 0  /* 对应点分十进制IPv4地址 */ <br>

#define LIBNET_RESOLVE      1  /* 对应主机名             */ <br>

根据这个取值确定hostname使用的是点分十进制IPv4地址(0)还是主机名(1)。无论本 <br>

机使用何种字节序,该函数最后得到的u_long是big-endian序(也是网络字节序)4字 <br>

节值,比如192.168.8.30对应0xc0 a8 08 1e。现代Unix操作系统的域名解析函数支 <br>

持把"192.168.8.30"作为形参输入,所以一般都指定该函数的第二个参数为 <br>

LIBNET_RESOLVE。 <br>



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

/* 编译命令相对古怪点,确认你的系统上有libnet-config脚本 */ <br>

/* gcc -O3 -o rt resolveTest.c `libnet-config --defines --cflags` `libnet-co <br>

nfig <br>

 --libs` */ <br>

#include <stdio.h> <br>

#include <stdlib.h> <br>

#include <libnet.h>  /* 使用libnet必须包含这个头文件 */ <br>

#define SUCCESS  0 <br>

#define FAILURE -1 <br>

int main ( int argc, char * argv[] ) <br>

{ <br>

    u_long   ipUl = 0x01020304;  /* 测试用 */ <br>

    u_char * ipUc; <br>

    int      i; <br>

    u_short  method; <br>

    if ( argc != 3 ) <br>

    { <br>

        fprintf( stderr, "%s <resolveObject> <method>\n", argv[0] ); <br>

        exit( FAILURE ); <br>

    } <br>

    method = ( u_short )strtoul( argv[2], NULL, 10 ); <br>



    if ( ( method != 0 ) && ( method != 1 ) ) <br>

    { <br>

        /* 第一个参数为LIBNET_ERR_FATAL,会导致exit */ <br>

        libnet_error( LIBNET_ERR_FATAL, "Bad method: %s\n", argv[2] ); <br>

    } <br>

    /* 这里返回-1表示出错,事实上我并不确定,man手册里没有提到 */ <br>

    if ( ( ipUl = libnet_name_resolve( argv[1], method ) ) == -1 ) <br>

    { <br>

        /* 仅仅显示警告信息,并不终止进程 */ <br>

        libnet_error( LIBNET_ERR_WARNING, "Bad resolveObject: %s\n", argv[1] <br>

 ); <br>

    } <br>

    ipUc = ( u_char * )&ipUl; <br>

    i    = 0; <br>

    while ( i < 4 ) <br>

    { <br>

        fprintf( stderr, "%02x ", ipUc[i] ); <br>

        i++; <br>

    } <br>

    fprintf( stderr, "\n" ); <br>

    return( SUCCESS ); <br>

}  /* end of main */ <br>



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

注意编译使用libnet库的源代码的时候要辅助以libnet-config脚本: <br>

[scz@ /home/scz/src]> gcc -O3 -o rt resolveTest.c `libnet-config --defines - <br>

-cfl <br>

ags` `libnet-config --libs` <br>

[scz@ /home/scz/src]> ./rt scz 0 <br>

Warning: Bad resolveObject: scz  <-- 虽然出现警告信息,但并未终止进程 <br>

ff ff ff ff                      <-- 正向解析失败,因为这里指定了0,scz不是点 <br>

分1 <br>

0进制IPv4地址 <br>

[scz@ /home/scz/src]> ./rt scz 1 <br>

c0 a8 08 5a                      <-- 正向解析成功 <br>

[scz@ /home/scz/src]> ./rt 192.168.8.30 0 <br>

c0 a8 08 1e <br>

[scz@ /home/scz/src]> ./rt 192.168.8.30 1 <br>

c0 a8 08 1e                      <-- 无论指定0还是1,对于点分地址都能解析成功 <br>

  <br>

[scz@ /home/scz/src]> ./rt 256.0.0.0 0 <br>

Warning: Bad resolveObject: 256.0.0.0 <br>

ff ff ff ff                      <-- 解析失败,因为这个点分地址非法 <br>

[scz@ /home/scz/src]> ./rt 256.0.0.0 1 <br>

Warning: Bad resolveObject: 256.0.0.0 <br>



ff ff ff ff <br>

[scz@ /home/scz/src]> ./rt www.isbase.com 0 <br>

Warning: Bad resolveObject: www.isbase.com <br>

ff ff ff ff <br>

[scz@ /home/scz/src]> ./rt www.isbase.com 1 <br>

ca 63 0b a1                      <-- 可以解析FQDN <br>

[scz@ /home/scz/src]> ./rt www.isbase.com 2 <br>

Fatal: Bad method: 2             <-- libnet_error()第一个参数为LIBNET_ERR_FA <br>

TAL <br>

  会导致exit <br>

[scz@ /home/scz/src]> <br>

反引号``表示执行其中的命令,并作为这里的输入,所以你可以单独看看究竟输入了 <br>

什么: <br>

[scz@ /home/scz/src]> libnet-config --defines --cflags <br>

-D_BSD_SOURCE -D__BSD_SOURCE -D__FAVOR_BSD -DHAVE_NET_ETHERNET_H -DLIBNET_LI <br>

L_EN <br>

DIAN <br>

[scz@ /home/scz/src]> libnet-config --libs <br>

-lnet <br>

[scz@ /home/scz/src]> file /usr/bin/libnet-config <br>

/usr/bin/libnet-config: Bourne shell script text <br>

[scz@ /home/scz/src]> <br>



以前有ansi88问过编译时出现LIBNET_BIG_ENDIAN相关错误,很可能是直接指定了 <br>

-lnet,却没有指定前面那一堆宏(-D用于命令行传递宏定义),没有仔细man的结果。 <br>

libnet-config是个脚本,如果你感兴趣,可以自己查看。 <br>

[scz@ /home/scz/src]> ls -l /usr/lib/libnet.a <br>

-rw-r--r--  43142 /usr/lib/libnet.a <br>

[scz@ /home/scz/src]> <br>

libnet.a是一个静态库,这样编译得到的可执行程序将来执行的时候不依赖于系统中 <br>

是否存在该库。 <br>

<待续> <br>

-- <br>

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

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

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

※ 修改:.scz 于 Jul 24 22:13:37 修改本文.[FROM: 203.207.226.124] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="519.htm">上一层</a>][<a href="527.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 + -