資源簡介
包過濾防火墻,分析捉獲得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篇
評論
共有 條評論