struct bpf_program fcode; /*存放已經編譯好的過濾表示式*/
獲取網路介面(網絡卡)後,我們需要開啟它:
pcap_t * pcap_open_live(const char * device, int snaplen, int promisc, int to_ms, char * errbuf)
功能:獲得資料報捕獲描述字
上面這個函式會返回指定介面的pcap_t型別指標,後面的所有操作都要使用這個指標。
第乙個引數是獲取的網路介面字串,可以直接使用硬編碼。
第二個引數是對於每個資料報,從開頭要抓多少個位元組,我們可以設定這個值來只抓每個資料報的頭部,而不關心具體的內容。典型的乙太網幀長度是1518位元組,但其他的某些協議的資料報會更長一點,但任何乙個協議的乙個資料報長度都必然小於65535個位元組。
第三個引數指定是否開啟混雜模式(promiscuous mode),0表示非混雜模式,任何其他值表示混合模式。如果要開啟混雜模式,那麼網絡卡必須也要開啟混雜模式,可以使用如下的命令開啟eth0混雜模式:
ifconfig eth0 promisc
第四個引數指定需要等待的毫秒數,超過這個數值後,第3步獲取資料報的這幾個函式就會立即返回。0表示一直等待直到有資料報到來。
第五個引數是存放出錯資訊的陣列。
struct ifreq 這個結構定義在/usr/include/net/if.h
getmacfromdevice函式下的htons(0x0806)是指arp協議。
ifnamsiz = if_namesize = 16.
ioctl選項siocgifhwaddr是獲取mac位址,siocgifaddr是獲取網絡卡ip位址。
pcap_compile()函式用於將使用者制定的過濾策略編譯到過濾程式中。
int
pcap_compile(pcap_t
*p,
struct
bpf_program
*fp,
char
*str,
int
optimize,
bpf_u_int32
netmask)
p:表示pcap會話控制代碼;
fp:存放編譯以後的規則;
str:規則表示式格式的過濾規則(filter),同tcpdump中的filter;
optimize:制定優化選項:0
false,
1 true;// 0表示
以混雜模式監聽所有符合過濾規則的
資料報;
netmask:監聽介面的網路掩碼;
返回值:-1表示操作失敗,其他值表成功。
int
pcap_setfilter(pcap_t
*p,
struct
bpf_program
*fp)
p:表示pcap的會話控制代碼;
fp:表示經過編譯後的過濾規則;
返回值:-1表示操作失敗,其他值表成功。
pcap_setfilter()函式用於應用過濾器。
pcap_next_ex(pcap_t* p,struct pcap_pkthdr** pkt_header,const u_char** pkt_data)
功能: 從inte***ce或離線記錄檔案獲取乙個報文
引數: p: 已開啟的捕捉例項的描述符
pkt_header: 報文頭
pkt_data: 報文內容
返回值: 1: 成功
0: 獲取報文超時
-1: 發生錯誤
-2: 獲取到離線記錄檔案的最後乙個報文
base64字元的最小單位是四個字元一組(也就是三個位元組)
base64編碼:
static
void fillbase64area(char area)
c1 = version[i++];c2 = version[i++];area[24] = tbl[ (c1&0xfc)>>2 ];area[25] = tbl[((c1&0x03)<<4)|((c2&0xf0)>>4)];
// 需補兩個6位,乙個是最後乙個8位的後4位補兩個0,另乙個對應異常的「=」area[26] = tbl[ ((c2&0x0f)<<2)];
area[27] = '=';
}
pcap_sendpacket()
傳送單個資料報函式原型: int pcap_sendpacket ( pcap_t * p, u_char * buf, int size ) 說明:該函式可以傳送乙個原始資料報到網路上。buf包含要傳送到網路上的資料報的資料(包括協議頭)。注意,mac crc不用包含,因為它是網絡卡驅動計算然後新增的。返回值為0說明資料報已經成功的傳送了,否則返回-1。
一點學習技巧
學習乙個新東西或者說要掌握乙個東西,要先理清他的脈絡,結構,做到心中有數,然後再就揪細節。就像高中時候寫作文一樣,我的文章 都是議 結構基本是一成不變的。總分總,分的中間,又是排比段落,總結,排比段落,總結。確認好主題,就是忘裡面填東西,所以只要有素材,寫作文特別快。同樣的,到了乙個新城市,你想要快...
一點一點進步
requestparam,是獲取前端傳遞給後端的引數,可以使get方式,也可以是post方式。若前端傳遞的引數和後端接收的引數名稱不一致,則必須要標註。pathvariable,是獲取get方式,url後面引數,進行引數繫結。1.裝箱就是講基本資料型別轉換為包裝類,拆箱就是自動將包裝類轉換為基本資料...
深度學習的一點點一點點知識
我們手裡有大量的x和y,求權重訓練的是權重資料樣本 xwy 身高0體重0 血型0.3 腳指頭0.8 一組x計算出對應的乙個y 計算過程是w 下面的就是最基礎的公式 我們已知資料是大量的x和y 希望通過 西塔 來獲得w 我們的學習才剛剛開始,首先需要理解的是與門 x1x2y0 0001 0100 11...