⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipgram.cpp

📁 这是一个嗅探器
💻 CPP
字号:
// IPGram.cpp: implementation of the IPGram class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "snifferpro.h"
#include "IPGram.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

IPGram::IPGram()
{

}

IPGram::IPGram(const unsigned char *buf,int buflen)
{
	//unsigned char *buf;
	unsigned char *pos;
	//int buflen;

	//buf=new unsigned char[buffer_len];
	//buflen=buffer_len;
	//memcpy(buf,buffer,buflen);
	
	pos=(unsigned char *)buf;
	version=*pos/16;
	IHL=*pos%16;

	pos++;
	servicetype=*pos;
	precedence=(*pos & 16)*4+(*pos & 8)*2+(*pos & 4);
	if(*pos & 16)
		delay=true;
	else 
		delay=false;
	if(*pos & 8)
		throughtput=true;
	else
		throughtput=false;
	if(*pos & 4)
		reliability=true;
	else
		reliability=false;

	pos++;
	totallen=(*pos)*256+(*(pos+1));

	pos+=2;
	identification=(*pos)*256+(*(pos+1));

	pos+=2;
	if(*pos & 64)
		DF=true;
	else
		DF=false;
	if(*pos & 32)
		MF=true;
	else
		MF=false;
	fragoffset=(*pos%32)*256+(*(pos+1));

	pos+=2;
	TTL=*pos;

	pos++;
	protocol=*pos;

	pos++;
	checksum=(*pos)*256+(*(pos+1));

	pos+=2;
	srcaddr=(*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));

	pos+=4;
	destaddr=(*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));


	if(IHL>5){
		pos+=4;
		optlen=(IHL-5)*4;
		options=new unsigned char[optlen];
		memcpy(options,buf+20,optlen);
	}
	else{
		optlen=0;
		options=NULL;
	}
	
	pos=(unsigned char *)(buf+IHL*4);
	datalen=totallen-IHL*4;
	if(datalen>0){
		data=new unsigned char[datalen];
		memcpy(data,buf+IHL*4,datalen);
	}
	else
		data=NULL;
	//delete[] buf;
}

IPGram::~IPGram()
{
	if(data!=NULL)
		delete[] data;
	if(options!=NULL)
		delete[] options;
}

CString IPGram::GetService()
{
	CString str;

	switch(this->protocol){
	case 6:
		str.Format("TCP");break;
	case 17:
		str.Format("UDP");break;
	case 1:
		str.Format("ICMP");break;
	case 89:
		str.Format("OSPF");break;
	default:
		str.Format("%d",protocol);
	}

	return str;
}


void IPGram::GetSrcAddr(char *str)
{	
	int temp=srcaddr;
	unsigned char i0,i1,i2,i3;

	i0=(temp & 0xff000000)/0x1000000;
	i1=(temp & 0x00ff0000)/0x10000;
	i2=(temp & 0x0000ff00)/0x100;
	i3=temp & 0x000000ff;
	sprintf(str,"%003u.%003u.%003u.%003u",i0,i1,i2,i3);
}

CString IPGram::GetSrcAddr()
{
	CString str;
	int temp=srcaddr;
	unsigned char i0,i1,i2,i3;

	i0=(temp & 0xff000000)/0x1000000;
	i1=(temp & 0x00ff0000)/0x10000;
	i2=(temp & 0x0000ff00)/0x100;
	i3=temp & 0x000000ff;
	str.Format("%003u.%003u.%003u.%003u",i0,i1,i2,i3);

	return str;
}

void IPGram::GetDestAddr(char *str)
{
	int temp=destaddr;
	unsigned char i0,i1,i2,i3;

	i0=(temp & 0xff000000)/0x1000000;
	i1=(temp & 0x00ff0000)/0x10000;
	i2=(temp & 0x0000ff00)/0x100;
	i3=temp & 0x000000ff;
	sprintf(str,"%003u.%003u.%003u.%003u",i0,i1,i2,i3);
}

CString IPGram::GetDestAddr()
{
	CString str;
	int temp=destaddr;
	unsigned char i0,i1,i2,i3;

	i0=(temp & 0xff000000)/0x1000000;
	i1=(temp & 0x00ff0000)/0x10000;
	i2=(temp & 0x0000ff00)/0x100;
	i3=temp & 0x000000ff;
	str.Format("%003u.%003u.%003u.%003u",i0,i1,i2,i3);

	return str;
}

CString IPGram::GetID()
{
	CString str;
	str.Format("%u",this->identification);
	return str;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -