天天看點

libnet 函數清單

libnet提供的接口函數按其作用可分為四類:

* 記憶體管理(配置設定和釋放)函數

* 位址解析函數

* 資料包構造函數

* 資料包發送函數

以下分别列出這些接口函數及其功能(其參數含義簡單易懂,不再解釋):

★記憶體管理函數

單資料包記憶體初始化:

int libnet_init_packet(u_short packet_size, u_char **buf);

單資料包記憶體釋放:

void libnet_destroy_packet(u_char **buf);

多資料包記憶體初始化:

int libnet_init_packet_arena(struct libnet_arena **arena,u_short packet_num, u_short packet_size);

通路多資料包記憶體中的下一個資料包:

u_char *libnet_next_packet_from_arena(struct libnet_arena **arena,u_short packet_size);

多資料包記憶體釋放:

void libnet_destroy_packet_arena(struct libnet_arena **arena);

★ 位址解析函數

解析主機名:

u_char *libnet_host_lookup(u_long ip, u_short use_name);

解析主機名(可重入函數):

void libnet_host_lookup_r(u_long ip, u_short use_name, u_char *buf);

域名解析:

u_long libnet_name_resolve(u_char *ip, u_short use_name);

擷取接口裝置IP位址:

u_long libnet_get_ipaddr(struct libnet_link_int *l,const u_char *device, const u_char *ebuf);

擷取接口裝置硬體位址:

struct ether_addr *libnet_get_hwaddr(struct libnet_link_int *l,const u_char *device,const u_char *ebuf);

★ 資料包構造函數

ARP協定資料包:

int libnet_build_arp(u_short hrdw, u_short prot, u_short h_len,u_short p_len, u_short op, u_char *s_ha,

u_char *s_pa, u_char *t_ha, u_char *t_pa,const u_char *payload, int payload_len,u_char *packet_buf);

DNS協定資料包:

int libnet_build_dns(u_short id, u_short flags, u_short num_q,u_short num_answ_rr, u_short num_auth_rr,

u_short num_add_rr, const u_char * payload,int payload_len, u_char *packet_buf);

以太網協定資料包:

int libnet_build_ethernet(u_char *daddr, u_char *saddr, u_short id,const u_char *payload, int payload_len,

u_char *packet_buf);

ICMP協定資料包(ICMP_ECHO / ICMP_ECHOREPLY):

int libnet_build_icmp_echo(u_char type, u_char code, u_short id,

u_short seq, const u_char *payload,int payload_len, u_char *packet_buf);

ICMP協定資料包(ICMP_MASKREQ / ICMP_MASKREPLY):

int libnet_build_icmp_mask(u_char type, u_char code, u_short id,

u_short seq, u_long mask,const u_char *payload, int payload_len,

u_char *packet_buf);

ICMP協定資料包(ICMP_UNREACH):

int libnet_build_icmp_unreach(u_char type, u_char code,

u_short orig_len, u_char orig_tos,u_short orig_id, u_short orig_frag,

u_char orig_ttl, u_char orig_prot,u_long orig_saddr, u_long orig_daddr,

const u_char *payload, int payload_len,u_char *packet_buf);

ICMP協定資料包(ICMP_TIMEXCEED):

int libnet_build_icmp_timeexceed(u_char type, u_char code,

u_short orig_len, u_char orig_tos,u_short orig_id, u_short orig_frag,

u_char orig_ttl, u_char orig_prot,u_long orig_saddr, u_long orig_daddr,

const u_char *payload, int payload_len,u_char *packet_buf);

ICMP協定資料包(ICMP_REDIRECT):

int libnet_build_icmp_redirect(u_char type, u_char code, u_long gateway,

u_short orig_len, u_char orig_tos,u_short orig_id, u_short orig_frag,

u_char orig_ttl, u_char orig_prot,u_long orig_saddr, u_long orig_daddr,

const u_char *payload, int payload_len,u_char *packet_buf);

ICMP協定資料包(ICMP_TSTAMP / ICMP_TSTAMPREPLY):

int libnet_build_icmp_timestamp(u_char type, u_char code, u_short id,

u_short seq, n_time otime, n_time rtime,n_time ttime, const u_char *payload,

int payload_len, u_char *packet_buf);

IGMP協定資料包:

int libnet_build_igmp(u_char type, u_char code, u_long ip,

const u_char *payload, int payload_len,u_char *packet_buf);

IP協定資料包:

int libnet_build_ip(u_short len, u_char tos, u_short ip_id, u_short frag,u_char ttl, u_char protocol, u_long saddr, u_long daddr, const u_char *payload, int payload_len,u_char *packet_buf);

OSPF路由協定資料包:

int libnet_build_ospf(u_short len, u_char type, u_long router_id,u_long area_id, u_short auth_type,

const char *payload, int payload_s, u_char *buf);

OSPF路由協定資料包(Hello):

int libnet_build_ospf_hello(u_long netmask, u_short interval,

u_char options, u_char priority,u_int dead_interval, u_long des_router,

u_long backup, u_long neighbor,const char *payload, int payload_s,u_char *buf);

OSPF路由協定資料包(DataBase Description (DBD)):

int libnet_build_ospf_dbd(u_short len, u_char options, u_char type,

u_int sequence_num, const char *payload,int payload_s, u_char *buf);

OSPF路由協定資料包(Link State Request (LSR)):

int libnet_build_ospf_lsr(u_int type, u_int ls_id, u_long adv_router,

const char *payload, int payload_s,u_char *buf);

OSPF路由協定資料包(Link State Update (LSU)):

int libnet_build_ospf_lsu(u_int num, const char *payload,int payload_s, u_char *buf);

OSPF路由協定資料包(Link State Acknowledgement (LSA)):

int libnet_build_ospf_lsa(u_short age, u_char options, u_char type,u_int ls_id, u_long adv_router, u_int sequence_num, u_short len,const char *payload, int payload_s,u_char *buf);

OSPF路由協定資料包(OSPF Link Sate NetworkLink State Router):

int libnet_build_ospf_lsa_net(u_long netmask, u_int router_id,

const char *payload, int payload_s,u_char *buf);

OSPF路由協定資料包(Link State Router):

int libnet_build_ospf_lsa_rtr(u_short flags, u_short num, u_int id,

u_int data, u_char type, u_char tos,u_short metric, const char *payload,int payload_s, u_char *buf);

OSPF路由協定資料包(Link State Summary):

int libnet_build_ospf_lsa_sum(u_long netmask, u_int metric, u_int tos,

const char *payload, int payload_s,u_char *buf);

OSPF路由協定資料包(Link State AS External):

int libnet_build_ospf_lsa_as(u_long netmask, u_int metric,

u_long fwd_addr, u_int tag,const char *payload, int payload_s,u_char *buf);

RIP路由協定資料包:

int libnet_build_rip(u_char cmd, u_char ver, u_short domain,

u_short addr_fam, u_short route_tag, u_long ip,u_long mask, u_long next_hop, u_long metric,

const u_char *payload, int payload_len,u_char *packet_buf);

TCP協定資料包:

int libnet_build_tcp(u_short th_sport, u_short th_dport, u_long th_seq,

u_long th_ack, u_char th_flags, u_short th_win,u_short th_urg, const u_char *payload,int payload_len, u_char *packet_buf);

UDP協定資料包:

int libnet_build_udp(u_short sport, u_short dport, const u_char *payload,int payload_len, u_char *packet_buf);

IP協定資料包選項:

int libnet_insert_ipo(struct ipoption *opt, u_char opt_len,u_char *packet_buf);

TCP協定資料包選項:

int libnet_insert_tcpo(struct tcpoption *opt, u_char opt_len,u_char *packet_buf);

★ 資料包發送函數

打開raw socket:

int libnet_open_raw_sock(int protocol);

關閉raw socket:

int libnet_close_raw_sock(int socket);

選擇接口裝置:

int libnet_select_device(struct sockaddr_in *sin,

u_char **device, u_char *ebuf);

打開鍊路層接口裝置:

struct libnet_link_int *libnet_open_link_interface(char *device,char *ebuf);

關閉鍊路層接口裝置:

int libnet_close_link_interface(struct libnet_link_int *l);

發送IP資料包:

int libnet_write_ip(int socket, u_char *packet, int packet_size);

發送鍊路層資料包:

int libnet_write_link_layer(struct libnet_link_int *l,const u_char *device, u_char *packet,int packet_size);

檢驗和計算:

int libnet_do_checksum(u_char *packet, int protocol, int packet_size);

★ 相關的支援函數

随機數種子生成器:

int libnet_seed_prand();

擷取随機數:

u_long libnet_get_prand(int modulus);

16進制資料輸出:

void libnet_hex_dump(u_char * buf, int len, int swap, FILE *stream);

端口清單鍊初始化:

int libnet_plist_chain_new(struct libnet_plist_chain **plist,char *token_list);

擷取端口清單鍊的下一項(端口範圍):

int libnet_plist_chain_next_pair(struct libnet_plist_chain *plist,u_short *bport, u_short *eport);

端口清單鍊輸出顯示:

int libnet_plist_chain_dump(struct libnet_plist_chain *plist);

擷取端口清單鍊:

u_char *libnet_plist_chain_dump_string(struct libnet_plist_chain *plist);

端口清單鍊記憶體釋放: