• 大小: 1.27MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-28
  • 语言: C/C++
  • 标签: Sniffer  

资源简介

有C++编写的,网络抓包程序,将本机网卡至于混杂模式,可分析的数据包有UDP,TCP,以及IP包

资源截图

代码片段和文件信息

#include “HdFuns.h“
#include 
#include 
#include “DataStruct.h“
void AnalyzeIpPackets(char *buff)
{
PIPHEADER pIphdr = (PIPHEADER)buff;
in_addr source dest;//源地址和目的地址
char szSourceIp[32] szDestIp[32];
printf(“\n-----------------------------------\n“);
source.S_un.S_addr = pIphdr->ipSourceAdd;//源IP
dest.S_un.S_addr = pIphdr->ipDestination;//目的IP
::strcpy(szSourceIp ::inet_ntoa(source));
::strcpy(szDestIp ::inet_ntoa(dest));
printf(“Soure IP:%s\n“szSourceIp);
printf(“Destination IP:%s\n“szDestIp);
//IP头长度
int nIpHeaderLen = (pIphdr->ipVersion & 0xf) * sizeof(ULONG);

switch(pIphdr->ipProtocol)
{
case IPPROTO_TCP://TCP
AnalyzeTcpPackets(buff + nIpHeaderLen);
break;
case IPPROTO_UDP://UDP
AnalyzeUdpPackets(buff + nIpHeaderLen);
break;
case IPPROTO_ICMP:
break;
}
}

void AnalyzeTcpPackets(char *buff)
{
PTCPHEADER pTcpHdr = (PTCPHEADER)buff;
printf(“Protocol:TCP\n“);
//输出端口号
printf(“Source Port:%d\n“::ntohs(pTcpHdr->sourcePort));
printf(“Destination Port:%d\n“::ntohs(pTcpHdr->destPort));
::memset(szText ‘ ‘ nRet);
int dataLen = nRet - sizeof(IPHEADER) - sizeof(TCPHEADER);//计算数据的长度
::memcpy(szText &buff[sizeof(TCPHEADER)] dataLen);//将数据包中的数据拷贝到缓冲区中

for (int i = 0; i < dataLen; i++)
{
//按字节分析数据
if (szText[i] < 0 )
{
szText[i] = -szText[i];
}
printf(“%X “ szText[i]);
}
switch(::ntohs(pTcpHdr->destPort))
{
case 21:
break;
case 80:
case 8080:
break;
}
}
void AnalyzeUdpPackets(char *buff)
{
printf(“Protocol:UDP\n“);
PUDPHEADER pUdpHdr = (PUDPHEADER)buff;
printf(“Source Port:%d\n“::ntohs(pUdpHdr->sourcePort));
printf(“Source Port:%d\n“::ntohs(pUdpHdr->destinationPort));
::memset(szText ‘ ‘  nRet);//清空缓冲区
int dataLen =nRet - sizeof(UDPHEADER) - sizeof(IPHEADER);
::memcpy(szText buff + sizeof(UDPHEADER) dataLen);
for (int i = 0; i < dataLen; i++)
{
if (szText[i] < 0 )
{
szText[i] = -szText[i];
}
printf(“%X “ szText[i]);
}
}

//主函数内容
#include “InitSocket.h“
#include 
#include “HdFuns.h“
#include 
using namespace std;
CInitSocket initSock;
int nRet;
int main(void)
{
SOCKET sRaw = ::socket(AF_INET SOCK_RAW IPPROTO_IP);//原始套接字
char szHostName[56];//主机名
SOCKADDR_IN localAddr;//本地地址

struct hostent *pHost;
::gethostname(szHostName 56);//获取主机名
if ((pHost = ::gethostbyname((char*)szHostName)) == NULL)
{
return 0;
}
localAddr.sin_family = AF_INET;
localAddr.sin_port  = ::htons(0);
::memcpy(&localAddr.sin_addr.S_un.S_addr pHost->h_addr_list[0] pHost->h_length);
cout<<“Bind to interface :“<<::inet_ntoa(localAddr.sin_addr)< if (::bind(sRaw (PSOCKADDR)&localAddr sizeof(localAddr)) == SOCKET_ERROR)
{
return 0;
}
DWORD dwValue = 1;
if (::ioctlsocket(sRaw SIO_RCVALL &dwValue) != 0)//设置网卡为混杂模式
{
return 0;
}
char buff[1024];
while(true)
{
nRet = ::recv(sRaw buff 1024 0);/

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3247  2009-04-22 15:21  Sniffer\1.cpp

     文件       3341  2009-04-22 15:06  Sniffer\1.dsp

     文件        510  2009-04-22 15:22  Sniffer\1.dsw

     文件      33792  2009-04-22 15:22  Sniffer\1.ncb

     文件      48640  2009-04-22 15:22  Sniffer\1.opt

     文件       1079  2009-04-22 15:21  Sniffer\1.plg

     文件       1312  2009-04-22 14:44  Sniffer\DataStruct.h

     文件     380844  2009-04-22 15:21  Sniffer\Debug\1.ilk

     文件      57089  2009-04-22 15:21  Sniffer\Debug\1.obj

     文件    3643536  2009-04-22 15:06  Sniffer\Debug\1.pch

     文件     590848  2009-04-22 15:21  Sniffer\Debug\1.pdb

     文件     249898  2009-04-22 15:21  Sniffer\Debug\Sniffer.exe

     文件     197632  2009-04-22 15:21  Sniffer\Debug\vc60.idb

     文件     135168  2009-04-22 15:21  Sniffer\Debug\vc60.pdb

     文件        250  2009-04-22 14:46  Sniffer\HdFuns.h

     文件        580  2009-04-22 14:45  Sniffer\InitSocket.h

     目录          0  2009-04-22 19:26  Sniffer\Debug

     目录          0  2009-04-22 15:22  Sniffer

----------- ---------  ---------- -----  ----

              5347766                    18


评论

共有 条评论