//#include "stdafx.h"
#include "winsock2.h"
#include "ws2tcpip.h"
#include "iostream.h"
#include "stdio.h"
typedef struct _ip_header
;byte servicetype;//服務型別
word totallen;//總長
word id;//標識
union
;byte timetolive;//生命期
byte protocol;//協議
word hdrchksum;//頭校驗和
dword srcaddr;//源位址
dword dstaddr;//目的位址
byte options;//選項
}ip_header;
//逐位解析ip頭中的資訊
void getversion(byte b,byte &version)
void getihl(byte b,byte &result)
char *parseservicetype_getprocedence(byte b)
}char *parseservicetype_gettos(byte b)
}void getflags(word w,byte &df,byte &mf)
void getfragoff(word w,word &fragoff)
char *getprotocol(byte protocol)
}void ipparse(file *file,char *buffer)
int main(int argc,char *argv)
file *file;
if((file=fopen(argv[1],"wb+"))==null)
wsadata wsdata;
//初始化失敗,程式退出
if(wsastartup(makeword( 2, 2 ),&wsdata)!=0)
socket sock;//建立原始socket
if((sock=socket(af_inet,sock_raw,ipproto_ip))==invalid_socket )
bool flag=true;
//設定ip頭操作選項,其中flag設定為true,使用者可以親自對ip頭進行處理
if(setsockopt(sock,ipproto_ip,ip_hdrincl,(char *)&flag,sizeof(flag))==socket_error)
char hostname[128];
if(gethostname(hostname,100)==socket_error)
//獲取本地ip位址
hostent *phostip;
if((phostip=gethostbyname(hostname))==null)
//地充sockaddr_in結構
sockaddr_in addr_in;
addr_in.sin_addr=*(in_addr *)phostip->h_addr_list[0];
addr_in.sin_family=af_inet;
addr_in.sin_port=htons(6000);
//把原始socket繫結到本地網絡卡上
if(bind(sock,(psockaddr)&addr_in,sizeof(addr_in))==socket_error)
dword dwvalue=1;
//設定sock_raw為sio_rcvall,以便接收所有的ip包
#define io_rcvall _wsaiow(ioc_vendor,1)
dword dwbufferlen[10];
dword dwbufferinlen=1;
dword dwbytesreturned=0;
if(wsaioctl(sock,io_rcvall,&dwbufferinlen,sizeof(dwbufferinlen),&dwbufferlen,sizeof(dwbufferlen),&dwbytesreturned,null,null)==socket_error)
}fclose(file);
return 0;
IP首部資料報格式大解析
p資料報首部格式 tcp ip協議定義了乙個在網際網路上傳輸的包,稱為ip資料報 ip datagram 這是乙個與硬體無關的虛擬包,由首部和資料兩部分組成,其格式如圖所示。首部的前一部分是固定長度,共20位元組,是所有ip資料報必須具有的。在首部的固定部分的後面是一些可選字段,其長度是可變的。首部...
資料報解析
從專業的角度來說,網路協議 osi就是乙個開放的通訊系統互聯參考模型,也是乙個定義的很好的協議規範。osi模型有7層結構,每層都可以有幾個子層。osi的7層從下到上分別是7 應用層 6 表示層 5 會話層 4 傳輸層 3 網路層 2 資料鏈路層 1 物理層。物理層 是參考模型的最低層。該層是網路通訊...
IP資料報格式
版本字段長度為4,用來表明建立資料報的ip版本,目前的ip版本是ipv4,ipv6正在發展中。ipv4的字段為0100 首部長度 報頭長度 指的是首部佔32 bit字的數目,包括任何選項。由於它是乙個4位元字段,因此首部最長為60個位元組。15x32 8 60位元組.ip首部始終是32 bit的整數...