• 大小: 1.96MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-21
  • 语言: C/C++
  • 标签:

资源简介

运用C++程序编程 实现IP数据报的捕获和解析 工程文件和课程设计报告全部都有 物超所值!

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include
#pragma comment(lib“ws2_32“) //指定连接到网络应用和internet
#define IO_RCVALL _WSAIOW(IOC_VENDOR1) 

typedef struct IP_HEAD 

union //定义联合

unsigned char Version; 
unsigned char HeadLen; 
}; 
unsigned char ServiceType; 
unsigned short TotalLen; 
unsigned short Identifier; 
union 

unsigned short Flags; 
unsigned short FragOffset; 
}; 
unsigned char TimeToLive; 
unsigned char Protocol; 
unsigned short HeadChecksum; 
unsigned int SourceAddr; 
unsigned int DestinAddr; 
unsigned char Options; 
}ip_head; //定义IP头部的数据结构

void main(int argcchar *argv[]) 

using namespace std; 
ofstream outfile(“C:\\file1.txt“ios::out);
if(argc!=2) 

cout<return; 

WSADATA WSAData; 
if(WSAStartup(MAKEWORD(22) &WSAData)!=0) 

cout<return; 

SOCKET sock=socket(AF_INETSOCK_RAWIPPROTO_IP); //三个参分别为通信发生的区字段,套接字的类型,与IP协议
if(sock==INVALID_SOCKET) 

cout<closesocket(sock); 
WSACleanup(); 
//goto exit_clean; 

BOOL flag=TRUE; 
//设置SockRaw这个套接字的ip选项中的IP_HDRINCL(包含首部)
if(setsockopt(sockIPPROTO_IPIP_HDRINCL(char *) &flagsizeof(flag))==SOCKET_ERROR) 

cout<closesocket(sock); 
WSACleanup(); 
//goto exit_clean; 

char hostName[128]; //获取主机名 
if(gethostname(hostName100)==SOCKET_ERROR) 

cout<closesocket(sock); 
WSACleanup(); 
//goto exit_clean; 

hostent *pHostIP; //获取本地IP
if((pHostIP=gethostbyname(hostName))==NULL) 

cout<closesocket(sock); //绑定网卡
WSACleanup(); 
//goto exit_clean; 

sockaddr_in host_addr; 
host_addr.sin_family=AF_INET; 
host_addr.sin_port=htons(6000); 
host_addr.sin_addr=*(in_addr *)pHostIP->h_addr_list[0]; 
if(bind(sock(PSOCKADDR)&host_addrsizeof(host_addr))==SOCKET_ERROR) 

cout<closesocket(sock); 
WSACleanup(); 
//goto exit_clean; 

DWORD dwBufferLen[10]; 
DWORD dwBufferInLen=1; 
DWORD dwBytesReturned=0; 
if(WSAIoctl(sock  IO_RCVALL &dwBufferInLen  sizeof(dwBufferInLen)  &dwBufferLensizeof(dwBufferLen)&dwBytesReturnedNULLNULL)==SOCKET_ERROR) 

cout<closesocket(sock); //将网卡设为混杂模式,以接受所有数据
WSACleanup(); 
//goto exit_clean; 

cout<char buffer[65535]; //设置缓冲区
int packsum=atoi(argv[1]); //字符串转换为整形
for(int i=0;i
if(recv(sockbuffer655350)>0) //四个参数分别是套接字描述符,缓冲区的地址,缓冲区大小,附加标志

ip_head ip=*(ip_head *)buffer; 
cout<<“-----------------------“<cout<<“版本:“<<(ip.Version>>4)<cout<<“头部长度:“<<((ip.HeadLen &0x0f)*4)<cout<<“服务类型:Priority“<<(ip.ServiceType>>5)<<“ Service“<<((ip.ServiceType>>1)&0x0

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     162816  2009-06-25 10:07  二版\IP数据包.doc

     文件       4729  2009-06-25 09:43  二版\ipparse\ipparse.cpp

     文件       3413  2009-06-25 10:07  二版\ipparse\ipparse.dsp

     文件        539  2009-06-25 10:07  二版\ipparse\ipparse.dsw

     文件      41984  2009-06-25 10:07  二版\ipparse\ipparse.ncb

     文件      48640  2009-06-25 10:07  二版\ipparse\ipparse.opt

     文件        751  2009-06-25 10:07  二版\ipparse\ipparse.plg

     文件     557149  2009-06-25 10:07  二版\ipparse\Debug\ipparse.exe

     文件     820384  2009-06-25 10:07  二版\ipparse\Debug\ipparse.ilk

     文件     266762  2009-06-25 10:07  二版\ipparse\Debug\ipparse.obj

     文件    5635388  2009-06-25 10:07  二版\ipparse\Debug\ipparse.pch

     文件    1131520  2009-06-25 10:07  二版\ipparse\Debug\ipparse.pdb

     文件     197632  2009-06-25 10:07  二版\ipparse\Debug\vc60.idb

     文件     143360  2009-06-25 10:07  二版\ipparse\Debug\vc60.pdb

     目录          0  2010-06-28 06:44  二版\ipparse\Debug

     目录          0  2010-06-28 06:44  二版\ipparse

     目录          0  2010-06-28 06:44  二版

----------- ---------  ---------- -----  ----

              9015067                    17


评论

共有 条评论

相关资源