抓包工具

简介: 原文:抓包工具    抓包工具:顾名思义、耳熟能详。tcpdump、wireshark、sniffsmart、httpwatch(还算有点良心)。。。     但当其只是当为工具使用时,又贵为可惜。
原文: 抓包工具

    抓包工具:顾名思义、耳熟能详。tcpdump、wireshark、sniffsmart、httpwatch(还算有点良心)。。。

    但当其只是当为工具使用时,又贵为可惜。因工作需要,再度涉及该领域。

    可随想云随风去,江河大变。某某文公司镜像工具,价比天高。某某调公司主打产品,爱理不理。

    脑中闪过一句 码农何苦为难码农。

    下班后闭关修炼3周,输出类似功能,自己动手丰衣足食。感谢libpcap,感谢gnu。下面把一些心得与君共享。

 

  1. 起步

    网上有很多libpcap的起步教程,这里就不几大主要函数的功能在此进行罗列,

    /*

* 回调函数

* ========

* arg pcap_loop外传参数

* pcap_pkthdr结构,该结构位于真正的物理帧前面,用于消除不同链路层支持的差异

* packet结构,指向所捕获报文的物理帧。

* void processPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)

*/

  

/* Opening the device for sniffing

* =======

* 打开一个设备,官方建议1.0以后使用pcap_create()和pcap_activate()

* 1-设备名称,2-每次捕捉的最大字节数,3-混杂模式, 4-捕捉间隔(毫秒),5-存放的报错信息

* 混杂模式:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包

*/

pcap_t *descr=pcap_open_live(device, MAXBYTE2CAPTURE, 1,1024, errbuf);

  

 

/* Loop forever & call processPacket() for every received packet

* =============

* 循环收报

* 1-设备名称,2-循环次数[-1无限],3,自定义回调,4,类同pthread_create的外传参数

*

* pcap_next

* ============

* pcap_next() returns a u_char pointer to the packet that is described by this structure

*

*

* void got_packet(u_char *args, const struct pcap_pkthdr *header,const u_char *packet);

* =====

* 1-外传参数,2,pcap-header。3, points to the first byte of a chunk of data containing the entire packet

*/

pcap_loop(descr, -1, processPacket, (u_char *)&count);

  

 2,解析HTTP包的坑

准备一张ASCII的表,转备一张EXCEL,提升你的分析速度。自认是高手的还可以备一份《密码学理论》。

先举例TELNET包,直接上图,不废话。蓝色为二层帧,橙色为三层包,绿色为四层包。四层包大坑在于包长会变。

 

    OSI的4~7层感觉有些酱油。直接跳7层进行展示

 

    http报文最恶心的在于OD/0A太多,列的意义无法固定,导致头不能固定,BODY不能固定。博主没太好的方法,统统扔给HBASE去玩。这里抛砖,望高手提供解决方案。

 

 

3,计算成本留给谁?

几乎所有抓包工具只输出一条单向记录,如果部署100台,每台每天产生1GB报文(算少的),那么把它们串成大闸蟹的活谁来干?

答案A: 每台服务器自己算

答案B: 交给后台SQL或NOSQL。

答案C:Hbase+Mapreduce。

======

答案A:很有意思,分散计算压力,同时训练你的算法实践能力应用。

答案B:训练你的sql能力,如oracle的connect by,但几乎坐等宕机。

答案C:训练你的MR能力。但槽点不少,从100-》1-》100^N。坐等硬盘和网络兹兹。

 

 

4,串包的烦恼

选B/C的下面就不要看了。大家都知道三次握手,但实际情况比这恶心多了。话说1来2去,2来1去,1来1去,0来1去,1去0来。

之前笔者也停留在理论阶段,在你用调试多种网站场景后发现,网络资源大多数浪费在这些seq和ack上。

串包看似简单,但实际操作起来还得应付各种N来N去的SHAKE场景。下图是比较理想的场景。

 

这个是F5不放的场景,其他的我就不贴了。

    

这是我想串成的场景。

    

    

怎么办?好在libpcap是一家良心的组织,包的分解几乎都是在阻塞形式下给出,这就给我们的程序设计提供的清晰的蓝天。

随即祭出码农3宝:红黑、指针、绕开FOR。

虾兵蟹将,三个皮匠,百试百灵。

开始为了程序的可读性:没用3宝前,1 CORE CPU高峰情况下就要30%~60%。3宝后,CPU立即压到了5%以下。欣喜!~

 

 5,时差的计算

 

 

http在所有报文结束都会有一个结束FIN动作,这动作在httpwatch中不被记录耗时,这个动作差不多就是两个MSL。所以这个耗时的计算我们要绕开,但HTTP何时才算正常传输完毕,这个是个头大是活儿。所以只能靠捕捉纯握手来进行判断,还要提前一个串联维度。当然这个维度至于提前多少,还要看具体场景进行分析。

 

6,说说回城卷轴

计算好的报文是珍贵的信息资源,但发回服务器的过程未必一帆风顺。服务器的设计就不多说了,要抗高负载就这么1、2个模型。从程序设计的便利度上看,临时存放在mq中是一个好选择。

虽然mq有初始大小限制,但对于程序的健壮性而言,不可谓是一个好的避风港。传回的过程在加上一个超时、非阻塞、自动重连、fork等特色。基本上你的程序就变成"周泰"

 

7,效果

 

  贴两张效果图。服务显示BODY RESPONSE完毕约203 MS。实际终端侧纯报文213MS,加上IE渲染40~50ms。OK,和目标一致,可以交差了。

 

 

 

 

 

 

 

 

目录
相关文章
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
210 2
|
26天前
|
人工智能 监控 供应链
51_安全性测试:提示注入与红队
在2025年,大型语言模型(LLM)已成为企业数字化转型的核心驱动力,但随之而来的安全挑战也日益严峻。数据显示,全球每月监测到超过50万次针对大语言模型的越狱攻击,这些攻击利用LLM的"黑箱"特性和自主生成能力,突破了传统安全边界。特斯拉自动驾驶系统因对抗性贴纸导致12%测试场景意外加速、加拿大航空聊天机器人误导票价信息被勒令退款、韩国初创公司因AI数据泄露被罚9.3万美元、谷歌Bard曾因错误信息导致市值缩水1000亿美元等真实案例,都凸显了LLM安全的重要性
|
10月前
|
Prometheus 监控 Cloud Native
无痛入门Prometheus:一个强大的开源监控和告警系统,如何快速安装和使用?
Prometheus 是一个完全开源的系统监控和告警工具包,受 Google 内部 BorgMon 系统启发,自2012年由前 Google 工程师在 SoundCloud 开发以来,已被众多公司采用。它拥有活跃的开发者和用户社区,现为独立开源项目,并于2016年加入云原生计算基金会(CNCF)。Prometheus 的主要特点包括多维数据模型、灵活的查询语言 PromQL、不依赖分布式存储、通过 HTTP 拉取时间序列数据等。其架构简单且功能强大,支持多种图形和仪表盘展示模式。安装和使用 Prometheus 非常简便,可以通过 Docker 快速部署,并与 Grafana 等可
5017 2
|
11月前
|
缓存 监控 网络协议
一文带你了解10大DNS攻击类型,收藏!
【10月更文挑战第23天】
2595 1
一文带你了解10大DNS攻击类型,收藏!
|
11月前
|
Java 数据库连接 调度
AQS深度解析与技术模拟
【11月更文挑战第26天】AbstractQueuedSynchronizer(AQS)是Java并发包(java.util.concurrent)中的一个核心组件,为构建锁和其他同步器提供了一个强大的基础框架。AQS通过定义一套多线程访问共享资源的同步器框架,极大地简化了同步组件的开发。本文将通过第一原理对AQS进行深入分析,涵盖其相关概念、业务场景、历史背景、功能点、底层原理,并使用Java代码进行模拟,以帮助读者全面理解AQS。
245 1
|
机器学习/深度学习 人工智能 安全
安全技术身份验证(Authentication)
【8月更文挑战第10天】
902 1
|
Kubernetes jenkins Devops
kubernetes+jenkins+harbor+gitlab构建企业级devops平台
kubernetes+jenkins+harbor+gitlab构建企业级devops平台
|
Java API Maven
springboot 、spring-data-elasticsearch、elasticserach的版本对应关系
springboot 、spring-data-elasticsearch、elasticserach的版本对应关系
2705 0
elementUI引用el-image-viewer组件全局方法预览大图
elementUI引用el-image-viewer组件全局方法预览大图
R语言-创建空数据框(Empty Data Frame )用于追加数据
本文分享了如何在R语言通过创建空数据框来实现追加数据的简单实现方法,以供参考
1002 0