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

📄 packetcapture.cpp

📁 C++编写的IP数据包分析
💻 CPP
字号:
#include "PacketCapture.h"
#include "NetAdapter.h"


CPacketCapture::CPacketCapture()
{

}

CPacketCapture::~CPacketCapture()
{

}

int CPacketCapture::Initialize(int AdapterNr)
{
	CNetAdapter   *netadapter=new CNetAdapter;
	SOCKADDR_IN   if0;
	unsigned int  optval;
    DWORD         dwBytesRet;

    sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
    if(sock==INVALID_SOCKET) {
		MessageBox(NULL,"Creation of Socket(SOCK_RAW/IPPROTO_IP) failed","Alert!",MB_OK);        
        return -1;
    }
	
	if(netadapter->GetAdapter(sock,&if0,AdapterNr)!=0) {
        MessageBox(NULL,"Unable to obtain selected network adapter!","Alert!",MB_OK);
        return -1;
    }

    if0.sin_family = AF_INET;
    if0.sin_port = htons(0);
    if(bind(sock,(SOCKADDR *)&if0,sizeof(if0))==SOCKET_ERROR) {
        MessageBox(NULL,"Bind call failed!","Alert!",MB_OK);
        return -1;
    }

    optval=1;   
    if(WSAIoctl(sock,SIO_RCVALL,&optval,sizeof(optval),NULL,0,&dwBytesRet,NULL,NULL)==SOCKET_ERROR){
		MessageBox(NULL,"WSAIoCtl(SIO_RCVALL) failed","Alert!",MB_OK);
		return -1;
	}
    
	delete netadapter;

	return 0;
}

int CPacketCapture::GetPacket(WSABUF *wbuf)
{
    DWORD         dwBytesRet=0,dwFlags=0;

    if(SOCKET_ERROR==WSARecv(sock,wbuf,1,&dwBytesRet,&dwFlags,NULL,NULL)){
		char buf[200];
		sprintf(buf,"WSARecv failed. Code %d",WSAGetLastError(),sock);
		MessageBox(NULL,buf,"Alert!",MB_OK);
	}
	wbuf->len=dwBytesRet;
   
	return 0;
}

⌨️ 快捷键说明

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