资源简介
在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游戏代码
- 下一篇:基于轮廓的倾斜仪表校正
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- LINUX下命令行界面的C语言细胞游戏
- 尚观培训linux许巍老师关于c语言的课
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- 《Linux程序设计》第四版pdf高清电子版
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- linux 0.11内核代码
- linux ac108多麦方案驱动(ac108.c)
- 共享内存 读写
- 简易web服务器的设计与实现
- 《LINUX C编程从初学到精通》光盘源码
评论
共有 条评论