资源简介
在linux平台上,用C++ 封装 raw socket套节子编程,包括makefile文件的所有源代码,希望对你有帮助。
代码片段和文件信息
#include“head.h“
RawSocket::RawSocket(int memory )
{
buffer = new unsigned char[memory];
this -> memory = memory;
}
RawSocket::~RawSocket()
{
delete []buffer;
}
void RawSocket::create_raw_socket()
{
if((sock = socket(PF_PACKET SOCK_RAW htons(ETH_P_IP))) < 0)
{
fprintf(stdout “create socket error\n“);
}
}
int RawSocket::receive_data()
{
return recvfrom(sock buffer 2048 0 NULL NULL);
}
void RawSocket::output_mac_address(unsigned char *macHead)
{
unsigned char *p = macHead;
int n = 0XFF;
printf(“MAC:\n %.2X:%02X:%02X:%02X:%02X:%02X==>%.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n\n“
p[6]&n p[7]&n p[8]&n p[9]&n p[10]&n p[11]&n
p[0]&n p[1]&n p[2]&n p[3]&n p[4]&n p[5]&n
);
}
void RawSocket::output_ip_address(unsigned char *ipHead)
{
unsigned char *p = ipHead + IP_ADDRESS_OFFSET;
int n = 0XFF;
printf(“IP:\n %u.%u.%u.%u => %u.%u.%u.%u\n\n“
p[0]&n p[1]&n p[2]&n p[3]&n
p[4]&n p[5]&n p[6]&n p[7]&n
);
}
void RawSocket::output_tcp_port(unsigned char *tcpHead)
{
unsigned char *p = tcpHead;
printf(“source port: %u => dest port: %u\n“
(((*p) << 8) | *(p + 1))
((*(p + 2) << 8) & 0XFF00) | ((*(p + 3)) & 0XFF)
);
}
void RawSocket::output_udp_port(unsigned char *udpHead)
{
unsigned char *p = udpHead;
printf(“source port: %u => dest port: %u\n“
(((*p) << 8) | *(p + 1))
((*(p + 2) << 8)& 0XFF00) | (*(p + 3) & 0XFF)
);
}
void RawSocket::output_data(unsigned char *dataHead unsigned int len)
{
dataHead[len] = ‘\0‘;
cout << “\n***\n“ < }
int RawSocket::get_protocol(unsigned char *ipHead)
{
return *(ipHead + IP_PROTOCOL_OFFSET);
}
double RawSocket::work(unsigned int times)
{
unsigned int count = 0;
unsigned int tcpLen udpLen dataLen;
double sumData = 0.0;
create_raw_socket();
while(++count < times)
{
cout << “case: “ << count < cout << endl;
unsigned int temp = receive_data();
sumData += double(temp);
if(temp < 42)
{
cout << “Incomplete header packet corrupt“ << endl;
continue;
}
macHead = buffer;
output_mac_address(macHead);
ipHead = macHead + IP_HEAD_OFFSET;
output_ip_address(ipHead);
switch(get_protocol(ipHead))
{
case IPPROTO_ICMP: cout << “ICMP“ << endl; break;
case IPPROTO_IGMP: cout << “IGMP“ << endl; break;
case IPPROTO_IPIP: cout << “IPIP“ << endl; break;
case IPPROTO_TCP: cout << “TCP“ << endl;
tcpHead = ipHead + ((*ipHead) & 0X0F) * 4;
tcpLen = (((unsigned int)((*(ipHead + IP_SUM_OFFSET)) << 8) & 0XFF00) | ((*(ipHead +\
IP_SUM_OFFSET + 1)) & 0XFF))- (unsigned int)(*ipHead & 0X0F) * 4;
cout << “the lenth of TCP package: “ << tcpLen << endl;
output_tcp_port(tcpHead);
dataLen = tcpLen - (unsigned int) (*(tcpHead +TCP_DATA_OFFSET) >> 4) * 4;
dataHead = tcpHead + tcpLen - dataLen;
cout << “data lenth is :“ << dataLen << endl;
output_data(dataHead dataLen);
break;
case IPPROTO_UDP: cout << “UDP“ << endl;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3846 2013-03-01 05:04 网络嗅探器\fun.cpp
文件 950 2013-03-01 05:03 网络嗅探器\head.h
文件 665 2013-03-01 07:07 网络嗅探器\test.cpp
文件 3728 2013-02-27 03:02 网络嗅探器\fun.cpp~
文件 185 2012-12-14 09:08 网络嗅探器\makefile
目录 0 2013-03-08 02:06 网络嗅探器\
- 上一篇:Linux下C语言2048游戏代码
- 下一篇:基于轮廓的倾斜仪表校正
相关资源
- Linux下C语言2048游戏代码
- c/c++实现银行家算法模拟
- C++写的SIS疾病传播模型模拟
- C++实现的旅行商问题
- Oracle OCCI(C++) 连接程序
- C++ NORAD SGP4/SDP4 Implementation
- VC++操作MSChart表格控件,效果不错。
- C++屏幕录制
- 《C++程序设计》 美 Y.Daniel Liang (梁勇
- 自动生成算式的四则运算机器
- C++游戏编程快速入门视频教程 高清不
- C++游戏服务器开发从入门到掌握.txt
- C++入门学习资料
- 郁金香vc++辅助教程合集
- C++高斯白噪声程序
- 用new和delete运算符动态分配内存空间
- 吕鑫-VS2015之C.C++.MFC等完整视频链接
- 数字图像处理原理与实践 基于Visua
- 套接字编程Socketc++实现源码
- c++ socket编程服务端代码!!!
- UE4中文视频教程,全面解析UE4中C++代
- 排队论MM1模型的C++仿真程序
- win10下vs2015编译TensorFlow1.4 C++源码 CP
- VC++ MFC 的计算器的详细设计
- ftp客户端的C语言实现
- 银行账户管理系统c++)
- vc++ 和 openGL 做的 3D水波模拟 非常炫
- 分水岭图像分割算法 c++实现
- tcp udp 底层c++封装类windows和linux
- c++c#结构体转换工具
评论
共有 条评论