粉丝不过W 

Libpcap

     pcap_open_live( )

/*
 *function:
 *  打开一个网络结构畸形数据包捕获
 *parameter:
 *  device:  网络接口的名字
 *  snaplen: 捕获数据包的长度
 *  promise: 1代表混杂模式,其它非混杂模式
 *  to_ms:   等待时间
 *  ebuf:    存储错误信息
 *return:
 *  一个Libpcap句柄
 */
pcap_t *pcap_open_live(const char *device,
                       int snaplen,
                       int promisc,
                       int to_ms,
                       char *ebuf)

   pcap_close( )

/*
 *function:
 *  关闭Libpcap操作,并销毁相应的资源
 *parameter:
 *  p: 需要关闭的Libpcap句柄
 */
void pcap_close(pcap_t *p)

   pcap_compile( )

/*
 *function:
 *  编译BPF过滤规则
 *parameter:
 *  p:         Libpcap句柄
 *  program:  bpf过滤规则
 *  buf:       过滤规则字符串
 *  optimize: 优化
 *  mask:     掩码
 *return:
 *  成功: 0
 *  失败: -1
 */
int pcap_compile(pcap_t *p,
                 struct bpf_program *program,
                 char *buf,
                 int optimize,
                 bpf_u_int32 mask)

    pcap_setfilter( )

/*
 *function:
 *  设置BPF过滤规则
 *parameter:
 *  p:  Libpcap句柄
 *  fp: BPF过滤规则
 *return:
 *  成功: 0
 *  失败: -1
 */
int pcap_setfilter(pcap *p, 
                   struct bpf_program *fp)

pcap_next( )

/*
 *function:
 *  捕获一个网络数据包
 *parameter:
 *  p: Libpcap句柄
 *  h: 数据包头
 *return:
 *  捕获的数据包的地址
 */
const u_char *pcap_next(pcap_t *p, 
                        struct pcap_pkthdr *h)

pcap_loop( )

/*
 *function:
 *  循环捕获网络数据包,直到遇到错误或者满足退出条件
 *每次捕获一个数据包就会调用callback指示的回调函数,所以可在回调函数中进行数据包的处理操作
 *parameter:
 *  p:       Libpcap句柄
 *  cnt:     指定捕获数据包的个数,如-1,会永无休止的捕获
 *  callback:回调函数
 *  user:    向回调函数中传递的参数
 *return:
 *  成功:0
 *  失败:负数
 */
int pcap_loop(pcap_t *p,
              int cnt, 
              pcap_handler callback,
              u_char *user);

typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *);

 

Libnet

   libnet_init( )

/*
 *function:
 *  数据包内存初始化及环境建立
 *marapeter:
 *  injection_type: 构造的类型
 *              LIBNET_LINK
 *              LIBNET_RAW4
 *              LIBNET_LINK_ADV
 *              LIBNET_RAW4_ADV
 *  device: 网络接口,如 "eth0", 或IP地址,也可为NULL(自动查询搜索)
 *  err_buf: 存放出错的信息
 *return:
 *  成功: 一个libnet句柄
 *  失败: NULL
 */
libnet_t *libnet_init(int injection_type, char *device, char *err_buf)

   libnet_destroy( )

/*
 *function:
 *  释放资源
 *parameter:
 *  l: libnet_init返回的句柄
 */
void libnet_destroy(libnet_t *l);

libnet_addr2name4( )

/*
 *function:
 *  将网络字节序转换成点分十进制数串
 *parameter:
 *  in: 网络字节序的ip地址
 *  use_name: LIBNET_RESOLVE、LIBNET_DONT_RESOLVE
 *return:
 *  成功: 点分十进制ip地址
 *  失败: NULL
 */
char* libnet_addr2name4(u_int32_t in, u_int8_t use_name)

libnet_name2addr4( )

/*
 *function:
 *  将点分十进制数串转换为网络字节序ip地址
 *parameter:
 *  l: libnet句柄
 *  host_name: 点分十进制数串的地址
 *  use_name: LIBNET_RESOLVE, LIBNET_DONT_RESOLVE
 *return:
 *  成功: 网络字节序ip地址
 *  失败: -1
 */
u_int32_t libnet_name2addr4(libnet_t *l, char *host_name, u_int8_t use_name)

libnet_get_ipaddr4( )

/*
 *function:
 *  获取接口设备ip地址
 *parameter:
 *  l: libnet句柄
 *return:
 *  成功: 网络字节序的ip地址
 *  失败: -1
 */
u_int32_t libnet_get_ipaddr4(libnet_t *l)

bnet_get_hwaddr( )

/*
 *function:
 *  获取接口设备硬件地址
 *parameter:
 *  l : libnet句柄
 *return:
 *  成功: 指向MAC地址的指针
 *  失败: NULL
 */
struct libnet_ether_addr* libnet_get_hwaddr(libnet_t *l)

libnet_build_udp( )

/*
 *function:
 *  构造udp数据包
 *parameter:
 *  sp:         源端口号
 *  dp:        目的端口号
 *  len:       udp包总长度
 *  sum:       校验和,设为0,libnet自动填充
 *  payload:   负载,可设为NULL
 *  payload_s: 负载长度,或为0
 *  l:          libnet句柄
 *  ptag:      协议标记
 *return:
 *  成功: 协议标记
 *  失败: -1
 */
libnet_ptag_t libnet_build_udp(u_int16_t sp,
                               u_int16_t dp,
                               u_int16_t len,
                               u_int16_t sum,
                               u_int8_t *payload,
                               u_int32_t payload_s,
                               libnet_t *l,
                               libnet_ptag_t ptag)

libnet_build_tcp( )

/*
 *function:
 *  构造tcp数据包
 *parameter:
 *  sp:         源端口号
 *  dp:        目的端口号
 *  seq:       序号
 *  ack:       ack标记
 *  control:   控制标记
 *  win:       窗口大小
 *  sum:       校验和,设为0,ibnet自动填充
 *  urg:       紧急指针
 *  len:       tcp包长度
 *  payload:   负载,可设为NULL
 *  payload_s: 负载长度,或为0
 *  l:          libnet句柄
 *  ptag:      协议标记
 *return:
 *  成功: 协议标记
 *  失败: -1
 */
libnet_ptag_t libnet_build_tcp(u_int16_t sp,        u_int16_t dp,
                               u_int32_t seq,       u_int32_t ack,
                               u_int8_t  control,   u_int16_t win
                               u_int16_t sum,       u_int16_t urg,
                               u_int16_t len,       u_int8_t  *payload,
                               u_int32_t payload_s, libnet_t  *l,
                               libnet_ptag_t ptag)

libnet_build_tcp_options( )

/*
 *function:
 *  构造tcp选项数据包
 *parameter:
 *  options:   tcp选项字符串
 *  options_s: 选项长度
 *  l:        libnet句柄
 *  ptag:     协议标记,若为0, 建立一个新的协议
 *return:
 *  成功: 协议标记
 *  失败: -1
 */
libnet_ptag_t libnet_build_tcp_options(u_int8_t *options,
                                       u_int32_t options_s,
                                       libnet_t *l, 
                                       libnet_ptag_t ptag)

libnet_build_ipv4( )

/*
 *function:
 *  构造一个 IPv4 数据包
 *parameter:
 *  ip_len:    ip 包总长
 *  tos:       服务类型
 *  id:        ip标识
 *  fla***偏移
 *  ttl:       生存时间
 *  prot:      上层协议
 *  sum:       校验和,设为0,libnet自动填充
 *  src:        源ip地址
 *  dst:       目的ip地址
 *  payload:   负载,可设为NULL
 *  payload_s: 负载长度,或为0
 *  l:          libnet句柄
 *  ptag:      协议标记
 *return:
 *  成功: 协议标记
 *  失败: -1
 */
libnet_ptag_t libnet_build_ipv4(u_int16_t ip_len,    u_int8_t  tos,
                                u_int16_t id,        u_int16_t flag,
                                u_int8_t  ttl,       u_int8_t  prot,
                                u_int16   sum,       u_int32_t src,
                                u_int32_t dst,       u_int8_t  *payload,
                                u_int32_t payload_s, libnet_t  *l,
                                libnet_ptag_t ptag);

libnet_build_ipv4_options( )

/*
 *function:
 *  构造IPv4选项数据包
 *parameter:
 *  options: tcp选项字符串
 *  options_s: 选项长度
 *  l: libnet句柄
 *  ptag: 协议标记,若为0,建立一个新的协议
 *return:
 *  成功: 协议标记
 *  失败: -1
 */
libnet_ptag_t libnet_build_ipv4_options(u_int8_t *options,
                                        u_int32_t options,
                                        libnet_t *l,
                                        libnet_ptag_t ptag)

libnet_build_arp( )

/*
 *function:
 *  构造 arp 数据包
 *parameter:
 *  hrd:      硬件地址格式, ARPHRD_ETHER( 以太网)
 *  pro:      协议地址格式, ETHERTYPE_IP( IP协议)
 *  hln:      硬件地址长度
 *  pln:      协议地址长度
 *  op:       ARP协议操作类型 1: ARP请求,2: ARP回应,3: RARP请求,4: RARP回应
 *  sha:      发送者硬件地址
 *  spa:      发送者协议地址
 *  tha:      目标硬件地址
 *  tpa:      目标协议地址
 *  payload:  负载,可设为NULL
 *  payload_s:负载长度,或为0
 *  l:         libnet句柄
 *  ptag:     协议标记
 *return:
 *  成功: 协议标记
 *  失败: -1
 */
libnet_ptag_t libnet_build_arp(u_int16_t hrd,       u_int16_t pro,
                               u_int8_t  hln,       u_int8_t  pln,
                               u_int16_t op,        u_int8_t  *sha,
                               u_int8_t  *spa,      u_int8_t  *tha,
                               u_int8_t  *tpa,      u_int8_t  *payload,
                               u_int32_t payload_s, libnet_t  *l,
                               libnet_ptag_t ptag)

libnet_build_ethernet( )

/*
 *function:
 *  构造一个以太网数据包
 *parameter:
 *  dst:       目的 mac
 *  src:       源mac
 *  type:      上层协议类型
 *  payload:   负载,即附带的数据
 *  payload_s: 负载长度
 *  l:         libnet句柄
 *  ptag:      协议标记
 *return:
 *  成功: 协议标记
 *  失败: -1
 */
libnet_ptag_t libnet_build_ethernet(u_int8_t *dst,
                                    u_int8_t *src,
                                    u_int16_t type,
                                    u_int8_t *payload,
                                    u_int32_t payload_s,
                                    libnet_t *l,
                                    libnet_ptag_t ptag)