资源简介
包过滤防火墙,分析捉获得IP包,如包的类型TCP,DUP,ICMP等报的状态
代码片段和文件信息
#include
#include
#include
#include
#include
#include “TYPE.h“
using namespace std;
#pragma comment(lib“WS2_32.lib“)
int main(void)
{
//SetConsoleCtrlHandler()
int err;
WSAData wsaData;
err = WSAStartup(MAKEWORD(22)&wsaData);//WSAStartup(WINSOCK_VERSION&wsaData);
if(0 != err)
{
cout< return -1;
}
SOCKET sock;
sock = socket(AF_INETSOCK_RAWIPPROTO_IP);//通过网卡截获并分析IP数据包采用raw原始套接字
if(INVALID_SOCKET == sock)
{
err = GetLastError();
cout< WSACleanup();
return -1;
}
char hostName[128];
err = gethostname(hostNamesizeof(hostName));//获取本地主机名
if(0 != err)
{
err = GetLastError();
cout< closesocket(sock);
WSACleanup();
return -1;
}
HOSTENT *pHostIP = NULL;
pHostIP = gethostbyname(hostName);//获取IP列表
if(NULL == pHostIP)
{
err = GetLastError();
cout< closesocket(sock);
WSACleanup();
return -1;
}
struct sockaddr_in sockAddr; //本地地址
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(6666);
sockAddr.sin_addr = *(in_addr*)pHostIP->h_addr_list[1];//S_un.S_addr
cout<<“Local IpAddress\t“<
err = bind(sock(struct sockaddr*)&sockAddrsizeof(sockAddr));//绑定
if(0 != err)
{
err = GetLastError();
cout< closesocket(sock);
WSACleanup();
return -1;
}
/*通常,网卡不能接收mac地址不是自己的IP数据包,要想能
捕获所有IP数据包,应该先将网卡的工作模式设置为“混杂”*/
//DWORD dwBufferLen[10];
//DWORD dwBufferInLen=1;
DWORD dwBytesReturned=0;
//err = WSAIoctl(sockSIO_RCVALL&dwBufferInLensizeof(dwBufferInLen)
//dwBufferLensizeof(dwBufferLen)&dwBytesReturnedNULLNULL);
int on = RCVALL_ON;
err = WSAIoctl(sockSIO_RCVALL&onsizeof(on)
NULL0&dwBytesReturnedNULLNULL);
if(0 != err)
{
cout<<““< }
int recvbuffLen;
int len = sizeof(recvbuffLen);
getsockopt(sockSOL_SOCKETSO_RCVBUF(char*)&recvbuffLen&len); //获取缓冲与大小
char *buffer = (char*)HeapAlloc(GetProcessHeap()HEAP_ZERO_MEMORYrecvbuffLen);
IP_HEAD *pIpHead = (IP_HEAD *)HeapAlloc(GetProcessHeap()HEAP_ZERO_MEMORYsizeof(IP_HEAD));
TCP_HEAD*pTcpHead= (TCP_HEAD*)HeapAlloc(GetProcessHeap()HEAP_ZERO_MEMORYsizeof(TCP_HEAD));
UDP_HEAD*pUdpHead= (UDP_HEAD*)HeapAlloc(GetProcessHeap()HEAP_ZERO_MEMORYsizeof(UDP_HEAD));
struct in_addr sourceIP; //源地址
struct in_addr destIP; //目地地址
unsigned char HeadLen = 0;
unsigned short TotalLen= 0;
while(TRUE)
{
memset(buffer‘\0‘recvbuffLen);
err = recvfrom(sockbufferrecvbuffLen0NULLNULL);
if(err == SOCKET_ERROR)
{
err = GetLastError();
cout< break;
}
memcpy(pIpHeadbuffer((((IP_HEAD *)buffer)->HeadLen)));
memcpy(&destIP&(pIpHead->DestIP)sizeof(in_addr));
memcpy(&sourceIP&(pIpHead->SourceIP)sizeof(in_addr));
HeadLen = ((pIpHead->HeadLen)&0x0f)*4;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2163712 2012-05-25 19:30 包过滤防火墙\PackFilter\Debug\PackFilter.bsc
文件 516160 2012-05-03 00:11 包过滤防火墙\PackFilter\Debug\PackFilter.exe
文件 781372 2012-05-03 00:11 包过滤防火墙\PackFilter\Debug\PackFilter.ilk
文件 168772 2012-05-25 19:30 包过滤防火墙\PackFilter\Debug\PackFilter.obj
文件 6487280 2012-05-15 22:55 包过滤防火墙\PackFilter\Debug\PackFilter.pch
文件 1082368 2012-05-25 19:30 包过滤防火墙\PackFilter\Debug\PackFilter.pdb
文件 0 2012-05-25 19:30 包过滤防火墙\PackFilter\Debug\PackFilter.sbr
文件 205824 2012-05-25 19:30 包过滤防火墙\PackFilter\Debug\vc60.idb
文件 143360 2012-05-25 19:30 包过滤防火墙\PackFilter\Debug\vc60.pdb
文件 4546 2012-05-25 17:38 包过滤防火墙\PackFilter\PackFilter.cpp
文件 4447 2012-05-03 00:37 包过滤防火墙\PackFilter\PackFilter.dsp
文件 545 2012-05-01 22:25 包过滤防火墙\PackFilter\PackFilter.dsw
文件 50176 2012-05-25 20:31 包过滤防火墙\PackFilter\PackFilter.ncb
文件 49664 2012-05-25 20:31 包过滤防火墙\PackFilter\PackFilter.opt
文件 1465 2012-05-25 19:30 包过滤防火墙\PackFilter\PackFilter.plg
文件 516160 2012-05-25 19:30 包过滤防火墙\PackFilter\Release\PackFilter.exe
文件 781816 2012-05-25 19:30 包过滤防火墙\PackFilter\Release\PackFilter.ilk
文件 43520 2012-05-03 13:03 包过滤防火墙\PackFilter\Release\PackFilter.opt
文件 1162 2012-05-11 19:40 包过滤防火墙\PackFilter\TYPE.h
目录 0 2013-01-03 23:52 包过滤防火墙\PackFilter\Debug
目录 0 2013-01-03 23:52 包过滤防火墙\PackFilter\Release
目录 0 2013-01-03 23:52 包过滤防火墙\PackFilter
目录 0 2013-01-03 23:52 包过滤防火墙
----------- --------- ---------- ----- ----
13002349 23
- 上一篇:最全的HFSS 仿真模型
- 下一篇:软件公司实习日记15篇
评论
共有 条评论