解析IP資料報

2021-04-25 19:15:56 字數 2140 閱讀 5066

//#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的整數...