ip数据报解析源地址目的地址(3)

2018-12-03 19:34

计算机网络课程设计

return \ default: return \ } }

void ipparse(FILE* file,char* buffer) {

IP_HEADER ip=*(IP_HEADER*)buffer; //通过指针把缓冲区的内容强制转化为IP_HEADER数据结构

fseek(file,0,SEEK_END); BYTE version;

getVersion(ip.Version,version);

fprintf(file,\版本号=%d\\r\\n\ BYTE headerLen;

getIHL(ip.HdrLen,headerLen);

fprintf(file,\报头标长=%d(BYTE)\\r\\n\ fprintf(file,\服务类型=%s,%s\\r\\n\

parseServiceType_getProcedence(ip.ServiceType), parseServiceType_getTOS(ip.ServiceType)); fprintf(file,\总长度=%d(BYTE)\\r\\n\ fprintf(file,\标识=%d\\r\\n\ BYTE DF,MF;

getFlags(ip.Flags,DF,MF);

fprintf(file,\标志 DF=%d,MF=%d\\r\\n\ WORD fragOff;

getFragOff(ip.FragOff,fragOff);

fprintf(file,\分段偏移值=%d\\r\\n\

fprintf(file,\生存期=%d(hopes)\\r\\n\ fprintf(file,\协议=%s\\r\\n\ fprintf(file,\头校验和=0x%0x\\r\\n\

fprintf(file,\源IP地址=%s\\r\\n\

fprintf(file,\目的IP地址=%s\\r\\n\ fprintf(file,\}

int main(int argc,char* argv[]) { if(argc !=2) { printf(\ return -1; }

FILE * file; if((file=fopen(argv[1],\

- 10 -

计算机网络课程设计

{ printf(\ return -1; }

WSADATA wsData;

if(WSAStartup(MAKEWORD(2,2),&wsData)!=0) { printf(\ return -1; }

//建立套接字 SOCKET sock;

if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET) { printf(\ return -1; }

BOOL flag=TRUE;

//设置IP头操作选项,用户可对IP头处理

if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR) { printf(\ return -1; }

char hostName[128];

if(gethostname(hostName,100)==SOCKET_ERROR) { printf(\ return -1; }

//获取本地地址 hostent * pHostIP;

if((pHostIP=gethostbyname(hostName))==NULL) { printf(\ return -1; }

//填充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);

if(bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in))==SOCKET_ERROR) {

- 11 -

计算机网络课程设计

printf(\ return -1; }//把socket绑定到本地网卡 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) { printf(\ return -1; } //设置接受数据包缓冲区长度 #define BUFFER_SIZE 65535 char buffer[BUFFER_SIZE]; //监听网卡

printf(\开始解析经过本机的IP数据包:\\n\ while(true) { int size=recv(sock,buffer,BUFFER_SIZE,0); if (size>0) { ipparse(stdout,buffer); ipparse(file,buffer); } } fclose(file); return 0; }

- 12 -

计算机网络课程设计

课程设计成绩评定表

学生姓名 专业班级 设计题目 IP数据报解析源地址/目的地址 指导教师评语及意见: 指导教师评阅成绩: 指导教师签字: 年 月 日

- 13 -


ip数据报解析源地址目的地址(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:六年级上册数学基础知识测试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: