更新時間:2016年08月24日10時39分 來源:傳智播客C++培訓(xùn)學(xué)院 瀏覽次數(shù):
功能:
構(gòu)造 tcp 數(shù)據(jù)包
參數(shù):
sp:源端口號
dp:目的端口號
seq:序號
ack:ack 標記
control:控制標記
win:窗口大小
sum:校驗和,設(shè)為 0,libnet 自動填充
urg:緊急指針
len:tcp包長度
payload:負載,為給應(yīng)用程序發(fā)送的文本內(nèi)容,可設(shè)置為 NULL
payload_s:負載長度,或為 0
l:libnet_init() 返回的 libnet * 指針
ptag:協(xié)議標記,第一次組新的發(fā)送包時,這里寫 0,同一個應(yīng)用程序,下一次再組包時,這個位置的值寫此函數(shù)的返回值。
返回值:
成功:協(xié)議標記
失敗:-1
libnet_ptag_t libnet_build_tcp_options(
u_int8_t *options,u_int32_t options_s,libnet_t *l,libnet_ptag_t ptag );
功能:
構(gòu)造 tcp 選項數(shù)據(jù)包
參數(shù):
options:tcp 選項字符串
options_s:選項長度
l:libnet 句柄,libnet_init() 返回的 libnet * 指針
ptag:協(xié)議標記,第一次組新的發(fā)送包時,這里寫 0,同一個應(yīng)用程序,下一次再組包時,這個位置的值寫此函數(shù)的返回值。
返回值:
成功:協(xié)議標記
失敗:-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 );
功能:
構(gòu)造一個 IPv4 數(shù)據(jù)包
參數(shù):
ip_len:ip 包總長
tos:服務(wù)類型
id:ip 標識
flag:片偏移
ttl:生存時間
prot:上層協(xié)議
sum:校驗和,設(shè)為 0,libnet 自動填充
src:源 ip 地址
dst:目的ip地址
payload:負載,可設(shè)置為 NULL(這里通常寫 NULL)
payload_s:負載長度,或為 0(這里通常寫 0 )
l:libnet 句柄,libnet_init() 返回的 libnet * 指針
ptag:協(xié)議標記,第一次組新的發(fā)送包時,這里寫 0,同一個應(yīng)用程序,下一次再組包時,這個位置的值寫此函數(shù)的返回值。
返回值:
成功:協(xié)議標記
失?。?1
libnet_ptag_t libnet_build_ipv4_options(
u_int8_t*options, u_int32_t options,libnet_t*l, libnet_ptag_t ptag);
功能:
構(gòu)造 IPv4 選項數(shù)據(jù)包
參數(shù):
options:tcp 選項字符串
options_s:選項長度
l:libnet 句柄,libnet_init() 返回的 libnet * 指針
ptag:協(xié)議標記,若為 0,建立一個新的協(xié)議
返回值:
成功:協(xié)議標記
失?。?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 );
功能:
構(gòu)造 arp 數(shù)據(jù)包
參數(shù):
hrd:硬件地址格式,ARPHRD_ETHER(以太網(wǎng))
pro:協(xié)議地址格式,ETHERTYPE_IP( IP協(xié)議)
hln:硬件地址長度
pln:協(xié)議地址長度
op:ARP協(xié)議操作類型(1:ARP請求,2:ARP回應(yīng),3:RARP請求,4:RARP回應(yīng))
sha:發(fā)送者硬件地址
spa:發(fā)送者協(xié)議地址
tha:目標硬件地址
tpa:目標協(xié)議地址
payload:負載,可設(shè)置為 NULL(這里通常寫 NULL)
payload_s:負載長度,或為 0(這里通常寫 0 )
l:libnet 句柄,libnet_init() 返回的 libnet * 指針
ptag:協(xié)議標記,第一次組新的發(fā)送包時,這里寫 0,同一個應(yīng)用程序,下一次再組包時,這個位置的值寫此函數(shù)的返回值。
返回值:
成功:協(xié)議標記
失?。?1
libnet_ptag_t libnet_build_ethernet(
u_int8_t*dst, u_int8_t *src,
u_int16_ttype, u_int8_t*payload,
u_int32_tpayload_s, libnet_t*l,
libnet_ptag_t ptag );
功能:
構(gòu)造一個以太網(wǎng)數(shù)據(jù)包
參數(shù):
dst:目的 mac
src:源 mac
type:上層協(xié)議類型
payload:負載,即附帶的數(shù)據(jù),可設(shè)置為 NULL(這里通常寫 NULL)
payload_s:負載長度,或為 0(這里通常寫 0 )
l:libnet 句柄,libnet_init() 返回的 libnet * 指針
ptag:協(xié)議標記,第一次組新的發(fā)送包時,這里寫 0,同一個應(yīng)用程序,下一次再組包時,這個位置的值寫此函數(shù)的返回值。
返回值:
成功:協(xié)議標記
失敗:-1
int libnet_write(libnet_t * l);
功能:
發(fā)送數(shù)據(jù)包
參數(shù):
l:libnet 句柄,libnet_init() 返回的 libnet * 指針
返回值:
成功:發(fā)送數(shù)據(jù)包的長度使用實例
失敗:返回 -1
這里是在 ubuntu 下通過原始套接字組一個 udp 數(shù)據(jù)包,給 PC 機的網(wǎng)絡(luò)調(diào)試助手發(fā)送信息(對比:《原始套接字實例:發(fā)送 UDP 數(shù)據(jù)包》):
復(fù)制代碼
本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://m.8y3kgpwe.cn/c/