當前位置:首頁 » 編程語言 » c語言解析pcap
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言解析pcap

發布時間: 2022-02-12 00:26:34

A. c語言解析

int a[20]={1,1},i; 是定義一個長度為20的整型數組a,並初始化數組前兩項為1,1,還定義了一個整形變數i

for(i=2;i<20;i++) a[i]=a[i–1]+a[i–2]; 是用for循環,讓數組里每一項都等於前兩項之和。

for(i=0;i<20;i++) printf(i%5==4)printf("\n");是用for循環,輸出整個數組

B. C語言程序解析

p 指向 數組a的首地址;
++,-- 的優先順序高於*
*p -> a[0] = 1;
*(++p) -> a[1] = 2;
*++p -> a[2] = 3;
*(p--) ->p-- 列印時地址還沒改變 ; -> a[2] = 3;
*p++ -> 上次列印結束,指針只想地址改變,回到 a[1] = 2;
*p -> 上次列印結束 , 指針像後面移動,指向 a[2] = 3;
++(*p) -> a[2]=3;的基礎上 *p 加 1 =》 4 =》導致 a[2] 的值改為4
*p 上面加一操作, *p 當前指向 a[2] = 4

C. C程序,定義了tcp頭,用winpcap抓包後列印包的埠號,結果跟wireshark顯示的不同。

這個,你沒有說清楚,是不是你用raw socket發送?自己填充的數據?還是你只是用c語言解析tcpmp格式的截包。由於頭部並非一成不定,要根據欄位先解析ethernet頭,然後ip頭,然後才是tcp頭部。如果不正確,請自己對照數據手工解析一下,看看問題在哪裡。
如果你使用python的話,用dpkt和pycap就可以。如果用c#類,也有基於winpcap的包,並且把
解析tcp之類的集成進去了。

D. C語言解析字元串

方法:檢測所有「=」和「;」之間的字元串,挺簡單的,自己寫吧

E. 如何用c語言編寫程序讀取並顯示部分wireshark所抓得數據包內容

1)如果是一些已經有插件可以提取的數據,可以直接使用,比如voip分析這塊就可以直接導出G711的音頻碼流,甚至直接播放
2)如果wireshark還沒有插件支持,自己寫代碼支持,比如用lua插件,或者直接用winpcap 開發包來操縱截包處理。
1)wireshark安裝後電子文檔chm的,有一章就是專門講lua寫私有協議解析插件的 2)如果採用基於winpcap開發包的模式,可以下載開發包wpdpack,裡面附帶了很多例子。另外,也有基於net的庫,很方便處理的。 這些搞清楚都需要花點時間。

F. 怎麼用C語言讀取wireshark捕獲的數據包,我寫了一個,但是總是讀不對,不知道是錯在哪裡

#pragmapack(push,1)
typedefstructpcap_hdr_s{
unsignedintmagic_number;/*magicnumber*/
unsignedshortversion_major;/*majorversionnumber*/
unsignedshortversion_minor;/*minorversionnumber*/
intthiszone;/*GMTtolocalcorrection*/
unsignedintsigfigs;/*accuracyoftimestamps*/
unsignedintsnaplen;/*maxlengthofcapturedpackets,inoctets*/
unsignedintnetwork;/*datalinktype*/
}pcap_hdr_t;
typedefstructpcaprec_hdr_s{
unsignedintts_sec;/*timestampseconds*/
unsignedintts_usec;/*timestampmicroseconds*/
unsignedintincl_len;/**/
unsignedintorig_len;/*actuallengthofpacket*/
}pcaprec_hdr_t;
typedefstruct{
unsignedshortsrc_mac[3];
unsignedshortdst_mac[3];
unsignedshortpkt_type;
}ethernet_hdr_t;
typedefstruct{
unsignedcharhdr_dwcnt:4;
unsignedcharversion:4;

unsignedcharech:2;
unsignedchardscp:6;
unsignedshortlen;
unsignedshortident;
unsignedshortfrag_offset:13;
unsignedshortflags:3;
unsignedcharttl;
unsignedcharproto;
unsignedshortcrc;
unsignedintsrc_addr;
unsignedintdst_addr;
}ipproto_hdr_t;
typedefstruct{
unsignedshortsrcport;
unsignedshortdstport;
unsignedintpktnum;
unsignedintacknum;
unsignedcharflags1:1;
unsignedcharreserved:3;
unsignedcharhdr_dwcnt:4;
unsignedcharflags2:8;

unsignedshortwndsize;
unsignedshortcrc;
unsignedshortptr;
}tcpproto_hdr_t;
#pragmapack(pop)
#include<stdio.h>
#include<stdlib.h>
voidRevert(void*val,intlen)
{
chartmp;
char*sp=(char*)val;
char*ep=sp+len-1;
while(sp<ep){
tmp=*sp;
*sp=*ep;
*ep=tmp;
++sp;
--ep;
}
}
voidMakeIPStr(char*output,unsignedlongnbsaddr)
{
unsignedcharb1,b2,b3,b4;
b1=nbsaddr&0xff;
b2=(nbsaddr>>8)&0xff;
b3=(nbsaddr>>16)&0xff;
b4=(nbsaddr>>24)&0xff;
sprintf(output,"%d.%d.%d.%d",b1,b2,b3,b4);
}
intmain()
{
FILE*fp;
pcap_hdr_tgheader;

fp=fopen("c:\11.pcap","rb");
fread(&gheader,sizeof(gheader),1,fp);

for(;;){
pcaprec_hdr_tpheader;
unsignedchar*pdata;
unsignedchar*ppdata;

if(fread(&pheader,sizeof(pheader),1,fp)==1){
pdata=(unsignedchar*)malloc(pheader.orig_len);
fread(pdata,pheader.orig_len,1,fp);

ppdata=pdata;
/*ethernetheader*/{
ethernet_hdr_t*ethhdr=(ethernet_hdr_t*)ppdata;
Revert(&ethhdr->src_mac[0],2);
Revert(&ethhdr->src_mac[1],2);
Revert(&ethhdr->src_mac[2],2);
Revert(&ethhdr->dst_mac[0],2);
Revert(&ethhdr->dst_mac[1],2);
Revert(&ethhdr->dst_mac[2],2);
Revert(&ethhdr->pkt_type,2);
printf("frommac:%04x%04x%04xtomac:%04x%04x%04x ",
ethhdr->src_mac[0],ethhdr->src_mac[1],ethhdr->src_mac[2],
ethhdr->dst_mac[0],ethhdr->dst_mac[1],ethhdr->dst_mac[2]
);
ppdata+=sizeof(*ethhdr);

if(ethhdr->pkt_type==0x800)
/*ipheader*/{
ipproto_hdr_t*iphdr=(ipproto_hdr_t*)ppdata;
charipbuf1[24],ipbuf2[24];
MakeIPStr(ipbuf1,iphdr->src_addr);
MakeIPStr(ipbuf2,iphdr->dst_addr);
printf("addrfrom:%sto%s ",ipbuf1,ipbuf2);
printf("ttl:%d ",iphdr->ttl);

ppdata+=iphdr->hdr_dwcnt*4;

if(iphdr->proto==0x06){/*tcp*/
tcpproto_hdr_t*tcphdr=(tcpproto_hdr_t*)ppdata;
Revert(&tcphdr->srcport,2);
Revert(&tcphdr->dstport,2);
printf("tcp,portfrom%dto%d ",tcphdr->srcport,tcphdr->dstport);

ppdata+=tcphdr->hdr_dwcnt*4;
puts("data:");
/*printdata*/{
intnDataLen=pdata+pheader.orig_len-ppdata;
inti;
for(i=0;i<nDataLen;++i){
printf("%02x",ppdata[i]);
if(i%16==15)puts("");
}
puts("");
}
}
}
puts("");
}
free(pdata);
}else
break;
}
fclose(fp);
return0;
}

真麻煩……

這個給你參考

超文本傳輸協議冒號兩個斜杠wiki點wireshark點org斜杠Development斜杠LibpcapFileFormat

G. c語言中解析IP數據報文

+14就是跳過頭部,從第14位元組起才是IP協議的報文內容,隨便用抓捕器抓一個包,可以看到這部分前導14個位元組是源地址和目的地址以及類型,它們不屬於IP協議本身。

H. C語言代碼解析

你應該還沒學指針吧,學了之後這個代碼就很好懂了。我先簡單說說,你可以把a[100]這個數組看成一個個抽屜,每個抽屜依次有自己的編號。子函數中a+n-1就是a[n-1]的編號值,a即為a[0]的編號,通過編號值找到a[n-1]這個排在最後的抽屜,把它抽出來,然後它之前的抽屜依次後移一格,它再放到第一個,隨著抽屜排序的變化,抽屜里存的數的順序也發生變化。通過m計數,將上述過程重復m次完成。

I. 求一個C語言程序,用來MAc數據幀解析,尤其是數據部的解析

建議你自己寫,分都沒有,給你寫還要網路MAC數據幀,而你卻輕松地問個問題。回答1+1似的問題沒分還以輕松蹭經驗,同樣沒分為什麼要給你寫這種有點小麻煩的程序。以後這種問題你有以下解決方法。判斷你是否有足夠的分?是--->你是否願意拿出足夠的分?是--->在知道提問會有人解答。其他情況你自己寫程序,這也是對你自己的鍛煉!結果都很完美!