解析IP数据包(3)

2019-08-30 12:47

} FILE *file;

/* 以读写的方式建立一个文本文件logfile.txt */ if((file=fopen(argv[1],\ printf(\ return -1; }

WSAData wsData;

/* 启动2.2版本的Socket,并将Socket版本信息保存到wsData中 */ if(WSAStartup(MAKEWORD(2,2),&wsData)!=0){ printf(\ return -1; }

fprintf(file,\初始化...\\r\\n\

fprintf(file,\ fprintf(file,\描述:%s\\r\\n\ fprintf(file,\状态:%s\\r\\n\

fprintf(file,\ SOCKET sock; /* 创建原始套接字 */

if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET){

printf(\

return -1; }

BOOL flag=true; /* 设置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; }

printf(\

printf(\

/* 封装IP地址信息 */ 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){

printf(\ return -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; }

char buffer[BUFFER_SIZE];

printf(\开始解析=============\\r\\n\ while(true){

/* 从套接字接收IP数据报 */

int size=recv(sock,buffer,BUFFER_SIZE,0); if(size>0){

ipparse(stdout,buffer); ipparse(file,buffer); } }

/* 解除Socket绑定 */

if(WSACleanup()==SOCKET_ERROR){ printf(\ return -1; }

/* 关闭文件 */ fclose(file); return 0; }

四、测试数据及其结果分析 1、在“运行”中输入cmd命令:

2、截获IP数据包程序运行结果如下:


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

下一篇:葡萄酒试题

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

马上注册会员

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