Libpcap Libnet 各個接口pai 鉅細

                                       粉絲不過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標識
 *  flag:      片偏移
 *  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)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章