小笔记

来源:互联网 发布:梦里花落知多少意思 编辑:程序博客网 时间:2024/06/10 14:16

struct pcap_pkthdr

struct pcap_pkthdr{      struct timeval ts;   /*ts是一个结构struct timeval,它有两个部分,第一部分是1900开始以来的秒数,第二部分是当前秒之后的毫秒数*/      bpf_u_int32 caplen;  表示抓到的数据长度      bpf_u_int32 len;    表示数据包的实际长度}

struct in_addr
IP结构体的使用

struct in_addr {    union {           struct {             u_char s_b1,s_b2,s_b3,s_b4;           } S_un_b;      //An IPv4 address formatted as four u_chars.          struct {             u_short s_w1,s_w2;           } S_un_w;   //An IPv4 address formatted as two u_shorts        u_long S_addr; //An IPv4 address formatted as a u_long    } S_un;};

inet_ntoa()函数介绍

char*inet_ntoa(struct in_addr in);

参数:
in:一个表示Internet主机地址的结构。

功能
将网络地址转换成“.”点隔的字符串格式。本函数将一个用in参数所表示的Internet地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。

返回值:
如果正确,返回一个字符指针,指向一块存储着点分格式IP地址的静态缓冲区(同一线程内共享此内存);错误,返回NULL。

函数原型:

/* Convert Internet number in IN to ASCII representation.  The return value is a pointer to an internal array containing the string.  */extern char *inet_ntoa (struct in_addr __in) __THROW;

pcap_open_live()函数]

函数原型:

pcap_t *pcap_open_live(const char *device, int snaplen,int promisc, int to_ms, char *errbuf)  

函数功能:
用来获得一个数据截获描述符(Descriptor),该描述符用于查看在网络上传输的数据包。

上面这个函数会返回指定接口的pcap_t类型指针,后面的所有操作都要使用这个指针。

第一个参数:获取的网络接口字符串,可以直接使用硬编码。

第二个参数:对于每个数据包,从开头要抓多少个字节,我们可以设置这个值来只抓每个数据包的头部,而不关心具体的内容。典型的以太网帧长度是1518字节,但其他的某些协议的数据包会更长一点,但任何一个协议的一个数据包长度都必然小于65535个字节。

第三个参数:指定是否打开混杂模式(Promiscuous Mode),0表示非混杂模式,任何其他值表示混合模式。如果要打开混杂模式,那么网卡必须也要打开混杂模式,可以使用如下的命令打开eth0混杂模式:
ifconfig eth0 promisc

第四个参数:指定需要等待的毫秒数,超过这个数值后,第3步获取数据包的这几个函数就会立即返回。0表示一直等待直到有数据包到来。

第五个参数:存放出错信息的数组。

memset函数:
函数介绍

void *memset(void *s, int ch, size_t n);

函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。

pcap_compile()函数

函数介绍

int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)

pcap_compile()函数用于将用户制定的过滤策略编译到过滤程序中。
将str参数指定的字符串编译到过滤程序中。fp是一个bpf_program结 构的指针,在pcap_compile()函数中被赋值。optimize参数控制结果 代码的优化。netmask参数指定本地网络的网络掩码。

编译数据包过滤器,将程序中高级的过滤表达式,转换成能被内核级的过滤引擎所处理的东西。 (参见 过滤表达式语法)第一个参数代表设备句柄,第二个参数为输出参数,为编译完成的过滤条件,第三个参数代表过滤条件的表达式,第四个参数表示是否优化,1是个不错的选择,第五个参数为网卡的掩码。

pcap_setfilter()函数

函数介绍

int pcap_setfilter(pcap_t *p, struct bpf_program *fp)

指定一个过滤程序。fp参数是bpf_program结构指针,通常取自pcap_compile()函数调用。出错时返回-1;成功时返回0。

pcap_next()函数

函数介绍

u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)

返回指向下一个数据包的u_char指针。返回下一个可用的数据包.

Linux下Kill函数用法

SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。

signal()函数

#include <signal.h>void (*signal(int signum, void (*handler))(int)))(int);

如果该函数原型不容易理解的话,可以参考下面的分解方式来理解:

typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler));

第一个参数指定信号的值,第二个参数指定针对前面信号值的处理,可以忽略该信号(参数设为SIG_IGN);可以采用系统默认方式处理信号(参数设为SIG_DFL);也可以自己实现处理方式(参数指定一个函数地址)。

如果signal()调用成功,返回最后一次为安装信号signum而调用signal()时的handler值;失败则返回SIG_ERR。

传递给信号处理例程的整数参数是信号值,这样可以使得一个信号处理例程处理多个信号。

0 0
原创粉丝点击