粉絲不過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)