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

📄 545.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="516.htm">上一层</a>][<a href="546.htm">下一篇</a>]
<hr><p align="left"><small>发信人: xh (江南白衣), 信区: Socket <br>

标  题: pcap库简介(转载) <br>

发信站: 华南网木棉站 (Wed May  3 13:42:11 2000), 转信 <br>

  <br>

   xh注:记得UNP中的pcap库么?hehe,学wooce..转载赚经验值来了.(函数列表后 <br>

有中文简介) <br>

  <br>

pcap库简介 <br>

在网络包抓取中pcap库是非常常用的一个库。目前它支持读取,虽然有几个可以往数据 <br>

链路层写的函数。它支持多种操作系统: <br>

Berkeley衍生系统下的BPF <br>

Solaris2.x下的DLPI <br>

SUNOS4.1.x的NIT <br>

linux下的SOCK_PACKET <br>

... <br>

它提供了更高级的包抓取接口。它不仅能抓取本地的包,也可以抓取目的地址是其他主 <br>

机的包。tcpdump就是用它来实现的。 <br>

下面是pcap提供的头文件和所有函数: <br>

#include <pcap.h> <br>

pcap_t *pcap_open_live(char *device, int snaplen, <br>

int promisc, int to_ms, char *ebuf) <br>

pcap_t *pcap_open_offline(char *fname, char *ebuf) <br>

pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname) <br>



char errbuf[PCAP_ERRBUF_SIZE]; <br>

char *pcap_lookupdev(char *errbuf) <br>

int pcap_lookupnet(char *device, bpf_u_int32 *netp, <br>

bpf_u_int32 *maskp, char *errbuf) <br>

int pcap_dispatch(pcap_t *p, int cnt, <br>

pcap_handler callback, u_char *user) <br>

int pcap_loop(pcap_t *p, int cnt, <br>

pcap_handler callback, u_char *user) <br>

    void pcap_dump(u_char *user, struct pcap_pkthdr *h, <br>

u_char *sp) <br>

int pcap_compile(pcap_t *p, struct bpf_program *fp, <br>

char *str, int optimize, bpf_u_int32 netmask) <br>

int pcap_setfilter(pcap_t *p, struct bpf_program *fp) <br>

u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h) <br>

int pcap_datalink(pcap_t *p) <br>

int pcap_snapshot(pcap_t *p) <br>

int pcap_is_swapped(pcap_t *p) <br>

int pcap_major_version(pcap_t *p) <br>

int pcap_minor_version(pcap_t *p) <br>

int pcap_stats(pcap_t *p, struct pcap_stat *ps) <br>

FILE *pcap_file(pcap_t *p) <br>

int pcap_fileno(pcap_t *p) <br>



void pcap_perror(pcap_t *p, char *prefix) <br>

char *pcap_geterr(pcap_t *p) <br>

char *pcap_strerror(int error) <br>

void pcap_close(pcap_t *p) <br>

void pcap_dump_close(pcap_dumper_t *p) <br>

下面对函数做一简单的介绍: <br>

pcap_open_live()被用来得到一个包抓取得描述符。错误时返回NULL. <br>

    device是一个指出要抓取的网络设备的字符串。 <br>

    snaplen指明最大可抓取的字节长度。 <br>

    promisc置位表明该接口要被设置成混杂模式。(注:如果这个参数是false,也可能 <br>

有别的原因把这个接口设成了混杂模式。 <br>

    to ms以毫秒为单位设置超时时间。 <br>

    ebuf被用来存放当pcap_open_live()调用失败时,返回的错误字符串。 <br>

pcap_open_offline()被用来打开一个savefile以供读取。 <br>

    fname:文件名,savefile具有用tcpdump()和tcpslice()所生成的文件一样的格式 <br>

。如果用"-",则表示标准输入。 <br>

    ebuf被用来存放当pcap_open_offline()调用失败时,返回的错误字符串。 <br>

pcap_dump_open()被用来打开一个savefile以供写入。 <br>

    fname:文件名。如果用"-",则表示标准输出。 <br>

    p:具有pcap struct的结构。是 pcap_open_offline()和pcap_open_live()的返回值 <br>

。 <br>

    如果返回NULL,可以用 pcap_geterr()读取错误值。 <br>



pcap_lookupdev()返回一个可以用在pcap_open_live()和pcap_lookupnet()的设备名。 <br>

  <br>

    ebuf被用来存放当pcap_lookupdev()调用失败时,返回的错误字符串。 <br>

pcap_lookupnet()被用来确定域网络设备相关的网络号和掩码。 <br>

pcap_dispatch()被用来收集和处理包。 <br>

    cnt指定每次返回之前可以处理的最大的包数。-1代表处理一个缓冲区内的所有包。 <br>

0代表处理所有的包,直到错误发生,文件结束,读取时间超时返回。 <br>

    callback被用来指定一个被用来调用的函数。它由3个参数:一个u_char的由pcap_ <br>

dispatch()传来的指针,一个pcap_pkthdr struct(用来处理实际的网络包头和数据), <br>

一个u_char的指向数据的指针。 <br>

    函数返回的是读取的数据包数。到达EOF将返回0。-1错误。用pcap_perror()或pca <br>

p_geterr()可以读取错误提示。 <br>

pcap_dump()输出一个包到pcap_dump_open()所打开的savefile中。 <br>

pcap_compile()把一个字符串编译到一个过滤程序中。 <br>

    program是一个指向bpf_program struct的指针。将被pcap_compile()填入。 <br>

    optimize指明是否需要优化编译结果。 <br>

    netmask指明本地的网络掩码。 <br>

pcap_setfilter()被用来指定一个过滤程序。 <br>

    fp是指向bpf_program struct数组的指针。一般是调用pcap_compile()的结果。 <br>

pcap_loop()非常像pcap_dispatch(),唯一不同的是它将保留所有读到的包直到cnt个包 <br>

被处理或者发生错误。负数将使它永远循环。 <br>

pcap_next()返回下一个包的指针。 <br>



pcap_datalink()返回数据链路层的类型,如10M以太,DLT_EN10MB. <br>

pcap_snapshot() 返回pcap_open_live调用时所指定的snapshot length. <br>

pcap_is_swapped()当savefile的字节顺序和当前系统的字节顺序不同的时候返回true. <br>

  <br>

pcap_major_version()和pcap_minor_version()分别返回当前的pcap的版本大小号。 <br>

pcap_file()返回当前的savefile文件名。 <br>

pcap_stats()返回一个pcap_stat的结构。结构中是从程序运行到现在所截到的包的一个 <br>

统计数据。如果有错,则说明低层不支持统计。 <br>

pcap_fileno()返回savefile的表述符号。 <br>

pcap_error(),pcap_geterr()打印上一个pcap库的错误。 <br>

pcap_close()关闭和p相关联的文件,并释放资源。 <br>

pcap_dump_close()关闭savefile. <br>

pcap库的作者: <br>

Van Jacobson, Craig Leres and Steven McCanne, all of the <br>

Lawrence Berkeley National Laboratory, University of Cali- <br>

fornia, Berkeley, CA. <br>

---- <br>

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