📄 packetcapture.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 + -