1,设置套接字为混杂模式

  设置为混杂模式接受所有网络包。

ioctlsocket(raw_sock, SIO_RCVALL, &arg)

2,解析协议

  以TCP协议为例,首先协议是封层的,如下图:

     +---------------------+|        TCP          |+---------------------+|  internet protocol  |+---------------------+

  所以为解析TCP,首先要先解析IP协议,然后在解析TCP协议。

以下为IP Header:

typedef struct ip_header_s {unsigned v : 4;unsigned ihl : 4;unsigned tos : 8;            //Type of Serviceunsigned total_len : 16;unsigned id : 16;unsigned flags : 3;   unsigned frag_offset : 13;unsigned ttl : 8;unsigned proto : 8;unsigned checksum : 16;unsigned src_ip : 32;unsigned dst_ip : 32;
}ip_header_t;

以下为TCP Header:

typedef struct tcp_header_s {unsigned src_port : 16;unsigned dst_port : 16;unsigned seq_num : 32;unsigned ack_num : 32;unsigned data_offset : 4;unsigned reserved : 6;unsigned ctrl_bits : 6;unsigned window : 16;unsigned checksum : 16;unsigned urg_pointer : 16;
}tcp_header_t;

3,解析IP头

以下为解析IP头的代码片段:

 ip_header_t *ip_hdr = (ip_header_t*)packet;in_addr source, dest;char src_ip[32], dst_ip[32];source.S_un.S_addr = ip_hdr->src_ip;dest.S_un.S_addr = ip_hdr->dst_ip;strcpy(src_ip, ::inet_ntoa(source));strcpy(dst_ip, ::inet_ntoa(dest));int hdr_len = ip_hdr->ihl;int proto = ip_hdr->proto;//printf("    %s -> %s proto(%d)\n", source_ip, dest_ip, proto);switch(proto){case IPPROTO_IPV4:break;case IPPROTO_TCP: // TCPdecode_tcp_packet(packet + hdr_len, src_ip, dst_ip);break;case IPPROTO_UDP:break;case IPPROTO_ICMP:break; }

4,代码demo

https://gitee.com/ZXlei/peach-sniffer.git

sniffer 嗅探器相关推荐

  1. PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)

    上一节(<4.1 SNIFFER(嗅探器)之数据捕获(上)>)中, 我们讲解了通过Raw Socket的方式来编写Sniffer的基本方法. 本节我们继续来编写Sniffer,只不过使用现 ...

  2. 几个Sniffer(嗅探器)工具

    多试试:多试试-计算机技术与软件 http://blog.csdn.net/zhoujunyi/article/details/1585953 几个Sniffer(嗅探器)工具 Sniffer(嗅探器 ...

  3. Web设计和开发人员有用的15Chrome插件

    1.Aviary Screen Capture屏幕截图 Aviary Screen Capture让你能够截取网页的屏幕快照.获得屏幕快照后,用Aviary.com的应用程序在浏览器内编辑那幅快照.基 ...

  4. Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  5. Rootkit Hunter Sourcecode Learning

    目录 1. Rootkit Hunter Introduce() 2. Source Code Frame() 3. do_system_check_initialisation() 4. do_sy ...

  6. 对Web设计和开发人员有用的15个Chrome插件

    导读:原文作者Brian在freelancefolder.com发表了一篇<15 Useful Google Chrome Extensions for Web Designers and De ...

  7. ARP攻击实战之WinArpAttacker

    关于ARP原理和理论的叙述的资源很多,大家可以在网上的搜一搜查看,本文主要是从ARP实战出发介绍一个叫"WinArpAttacker"的工具. AD:WOT2015 互联网运维与开 ...

  8. IT英语职场之网管英语大全

    Access Control List(ACL) 访问控制列表 access token 访问令牌 account lockout 帐号封锁 account policies 记帐策略 account ...

  9. fred dataset_Excel经济数据加载项:FRED

    fred dataset How bad is the economy? With FRED, the free Excel add-in from the St. Louis Federal Res ...

  10. 【网络与系统安全实验】网络监听及防御技术

    网络监听及防御技术 网络监听概述 基础知识 网络监听的概念 网络监听技术又叫做网络嗅探技术,顾名思义这是一种在他方未察觉的情况下捕获其通信报文或通信内容的技术. 在网络安全领域,网络监听技术对于网络攻 ...

最新文章

  1. [亿能测试_www.gdtesting.com]测试技术资料网盘共享
  2. 六大“未来式”存储器,谁将脱颖而出?
  3. 将mnist数据集存储到本地文件
  4. Mac上因磁盘格式导致gulp无限刷新问题
  5. boost::uuids::random_generator相关的测试程序
  6. JVM -XX: 参数介绍
  7. java版本的getorcreate,getOrCreate for java-rest-api neo4j失敗
  8. React开发(137):ant design学习指南之form中日期时间处理format时间处理
  9. udp服务器php代码例子,Java客户端PHP服务器UDP穿孔示例代码
  10. 手机不用了,如何消除里面的数据和信息而又不被人可以恢复?
  11. IP记录Linux所有用户操作日志的方法(附脚本)
  12. PHIL2650 是个好课程
  13. 一个软件工程师在北京的反省
  14. Boost Thread 编程指南、Boost线程入门教程
  15. 分布式框架的基石之远程通信协议
  16. 在安装win7系统时如何不产生100M的系统保留分区
  17. kali-2019.4中文乱码问题的解决
  18. Linux软件安装包保存
  19. php自定义函数全局声明,【phpcms-v9】phpcms-v9中自定义全局函数文件:extention.func.php...
  20. matlab自带的mri数据集,探查三维 MRI 数据集的切片

热门文章

  1. 文档服务器拓扑图,服务器网络结构拓扑图
  2. Employee类的层级结构
  3. 微信小程序踩坑”日记“--Failed to load image xxx (404)
  4. 阿里云服务器安全组配置
  5. Linux之父:不担心微软接管Linux
  6. 台湾Yahoo联手Mozilla 对抗Google
  7. promise终止方案
  8. DiskGenius屏蔽硬盘坏道方法
  9. 为什么说全球变暖不是阴谋论
  10. 使用chrome console检查css selector/xpath的有效性|百度云盘如何获取文件库中的目录文字