


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/ 定义异常出错代码/ 接收的最大/ 点分十进制/ 最大主机名长度/ 定义 IP 首部/4/16/16/3 位标志位/8/16#include "stdafx.h"#include "stdio.h"#include "string.h"#include "mstcpip.h"#include "Winsock2.h" #pragma comment(lib,"WS2_32.lib")#define STATUS_FAILED 0xFFFF#define MAX_PACK_L
2、EN 65535IP 报文#define MAX_ADDR_LEN 16地址的最大长度#define MAX_HOSTNAME_LAN 255typedef struct _iphdrunsigned char h_lenver;位首部长度 +4 位 IP 版本号 unsigned char tos;/8 位服务类型 TOSunsigned short total_len;位总长度(字节)unsigned short ident;位标识unsigned short frag_and_flags; unsigned char ttl;/8 位生存时间 TTL unsigned char prot
3、o;位协议(TCP或其他)unsigned short checksum;位 IP 首部校验和unsigned int sourceIP;位源 IP 地址 unsigned int destIP;/ 定义 TCP 首/4/6位目的 IP 地址 IP_HEADER;typedef struct _tcphdr部USHORT th_sport;/16 位源端口USHORT th_dport;/16 位目的端口 unsigned int th_seq; unsigned int th_ack; unsigned char th_lenres;位首部长度 /6 位保留字 unsigned char t
4、h_flag;位标志位USHORT th_win;/16 位窗口大小USHORT th_sum;/16 位校验和USHORT th_urp;/16 位紧急数据偏移量 TCP_HEADER;SOCKET SockRaw;char* TcpFlag6= / 定 义 TCP 标志位"FIN ",/FIN: 表示发送端已经没有数据要求传输了,希望释放连接"SYN ",/SYN:标志位用来建立连接,让连接双方同步序列号。如果SYN= 1而ACK=0 则表示该数据包为连接请求,如果 SYN=1而 ACK=侧表示接受连接。"RST ",/RST:用
5、来复位一个连接。RST标志置位的数据包称为复位包。一般情况下, 如果TCP收到的一个分段明显不是属于该主机上的任何一个连接,则向远端发送一个复位包。"PSH ",/PSH: 如果置位,接收端应尽快把数据传送给应用层。"ACK ",/ACK: 为确认标志位。如果为 1,表示包中的确认号时有效的。否则,包中 的确认号无效。"URG "/URG: 为紧急数据标志。如果它为 紧急数据指针有效。;bool ParamTcp =true;报文char *strFromIpFilter=NULL;过滤char *strDestIpFilter=NU
6、LL;滤1,表示本数据包中包含紧急数据。此时/ -t 关注 TCP/ 源 IP 地址/ 目的地址过/Referrenceint DecodeIpPack(char *,int);int DecodeTcpPack(char *); void CheckSockError(int,char*); void usage(void);bool GetCmdLine(int, char *);/void main(int argc, char * argv)int iErrorCode;char RecvBufMAX_PACK_LEN = 0 ; usage();if(GetCmdLine(argc,
7、 argv)=true) exit(0);/ 初始化 SOCKETWSADATA wsaData;iErrorCode = WSAStartup(MAKEWORD(2,1),&wsaData); CheckSockError(iErrorCode, "WSAStartup");SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP); CheckSockError(SockRaw, "socket");/ 获取本机 IP 地址char FAR nameMAX_HOSTNAME_LAN;iErrorCode
8、 = gethostname(name, MAX_HOSTNAME_LAN);CheckSockError(iErrorCode, "gethostname");struct hostent FAR * pHostent;pHostent = (struct hostent * )malloc(sizeof(struct hostent);pHostent = gethostbyname(name);SOCKADDR_IN sa;sa.sin_family = AF_INET;sa.sin_port = htons(6000);memcpy(&sa.sin_addr
9、.S_un.S_addr, pHostent->h_addr_list0, pHostent->h_length);iErrorCode = bind(SockRaw, (PSOCKADDR)&sa, sizeof(sa); CheckSockError(iErrorCode, "bind");/设置SOCK_RA为SIO_RCVAL,以便接收所有的IP包DWORD dwBufferLen10 ;DWORD dwBufferInLen = 1 ;DWORD dwBytesReturned = 0 ; iErrorCode=WSAIoctl(SockRaw
10、,SIO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen), &dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL );CheckSockError(iErrorCode, "Ioctl");/ 侦听 IP 报文while(true)memset(RecvBuf, 0, sizeof(RecvBuf);iErrorCode = recv(SockRaw, RecvBuf, sizeof(RecvBuf), 0);CheckSockErr
11、or(iErrorCode, "recv");iErrorCode = DecodeIpPack(RecvBuf, iErrorCode);CheckSockError(iErrorCode, "Decode");/IP 解包程序int DecodeIpPack(char *buf, int iBufSize)IP_HEADER *pIpheader;int iProtocol, iTTL;char szProtocol4;char szSourceIPMAX_ADDR_LEN, szDestIPMAX_ADDR_LEN;SOCKADDR_IN saSo
12、urce, saDest;pIpheader = (IP_HEADER *)buf;/Check ProtoiProtocol = pIpheader->proto;strncpy(szProtocol, "TCP", 4);if(iProtocol=IPPROTO_TCP)/Check Source IPsaSource.sin_addr.s_addr = pIpheader->sourceIP;strncpy(szSourceIP, inet_ntoa(saSource.sin_addr), MAX_ADDR_LEN); if (strFromIpFilte
13、r)if (strcmp(strFromIpFilter,szSourceIP)return true;/Check Dest IPsaDest.sin_addr.s_addr = pIpheader->destIP;strncpy(szDestIP, inet_ntoa(saDest.sin_addr), MAX_ADDR_LEN);if (strDestIpFilter)if (strcmp(strDestIpFilter,szDestIP)return true;/TTLiTTL = pIpheader->ttl;/Outputprintf("%s ",
14、szProtocol);printf("%s->%s ", szSourceIP, szDestIP);printf("bytes=%d TTL=%d ",iBufSize,iTTL);/Calculate IP Header Lengthint iIphLen = sizeof(unsigned long) * (pIpheader->h_lenver & 0xf);/Decode Sub Protocol:TCP DecodeTcpPack(buf+iIphLen);return true;/SOCK 错误处理程序void Che
15、ckSockError(int iErrorCode, char *pErrorMsg)if(iErrorCode=SOCKET_ERROR) printf("%s Error:%dn", pErrorMsg, GetLastError(); closesocket(SockRaw);exit(0);/TCP 解包程序int DecodeTcpPack(char * TcpBuf)TCP_HEADER * pTcpHeader;pTcpHeader = (TCP_HEADER * )TcpBuf; printf("Port:%d->%d ", nt
16、ohs(pTcpHeader->th_sport),ntohs(pTcpHeader->th_dport);unsigned char FlagMask = 1;int HdrLen = (pTcpHeader->th_lenres)>>2; printf("n%s",(BYTE *)pTcpHeader)+HdrLen);for( int i=0; i<6; i+ ) if(pTcpHeader->th_flag) & FlagMask) printf("%s",TcpFlagi);else print
17、f(" ");FlagMask=FlagMask<<1; printf("n"); return true;/ 命令行参数处理bool GetCmdLine(int argc, char * argv)for(int i=1;i<argc;i+)if(argvi0!='/')return true;elseswitch (argvi1)case 'f':case 'F': strFromIpFilter=(char*)malloc(16*sizeof(char); memset(strFr
18、omIpFilter,0,16*sizeof(char); strcpy(strFromIpFilter,argvi+3); break;case 'd':case 'D': strDestIpFilter=(char*)malloc(16*sizeof(char); memset(strDestIpFilter,0,16*sizeof(char); strcpy(strDestIpFilter,argvi+3); break;case '?':return true;break;default:break;printf("nWill Sniffer"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度家电产品绿色包装设计合同
- 2025年度城市绿化工程定金担保合同
- 2025年度文化旅游项目宣传推广服务合同范本
- 2025版水果包装设计与品牌形象合作协议
- 2025年度保安服务市场合作协议范本:共享市场资源
- 2025年度公司管理层聘用合同:副总经理岗位聘任书
- 2025版全新智能交通软件下载与规划合同
- 2025常见外贸化妆品销售合同模板
- 2025版托盘租赁与仓储物流服务合作协议
- 2025年度高端酒店客房管理承包合作协议书
- 设备安全案例培训课件
- 贝壳租房合同协议
- 订单代发合同协议
- 电动自行车新标准培训
- 浙江省杭州市滨江区杭二滨江、杭二钱江2024-2025学年高一上学期期末考英语试卷(原卷版+解析版)
- 制造技术部工作总结报告
- DB11-T 1947-2021 国土空间分区规划计算机辅助制图标准
- 教培机构培训资料如何上好第一次课
- Unit-1-4-单词背诵+默写学案高中英语牛津译林版(2020)必修第二册
- 2025年中国邮政集团招聘笔试参考题库含答案解析
- 民警给学生上交通安全课
评论
0/150
提交评论