1.在ESTABLISHED状态时,探针连接收到SYN会回复什么?
2.网络测量工具集合(ZMap、地址XMap、源码scamper、探针mtr、地址ZGrab 2.0,源码开源商城系统源码pyasn(IP2AS) 持续更新ing...)
3.实战|Java 测试覆盖率 Jacoco 插桩的探针不同形式总结和踩坑记录
4.想问一下大家都是怎么做渗透测试的呢?
在ESTABLISHED状态时,连接收到SYN会回复什么?
最初的地址问题,读者在阅读我关于《TCP RST 攻击与如何杀掉一条 TCP 连接》时提出,源码即处于 ESTABLISHED状态的探针连接为什么还需要响应 SYN 包?接下来,我们通过实验、地址内核源码分析与工具介绍,源码详细解答这一问题。探针实验复现
在机器 A(IP:...)使用 nc 启动服务监听 端口。地址同时,源码机器 B 使用 nc 连接 A 的 nc 服务器,并输入 "hello"。通过 tcpdump 观察此次连接信息。随后,机器 B 使用 scapy 模拟发送 SYN 包,并查看 tcpdump 显示的包结果。实验发现,对于一个序列号为随意的 SYN 包,TCP 回复了正确的 ACK 包,确认号为 。RFC 文档也指出,Linux 内核收到乱序 SYN 报文时,会回复携带正确序列号和确认号的 ACK 包,即 Challenge ACK。原因分析
发送 SYN 包的一端记为 A,接收 SYN 的 ESTABLISHED 状态端记为 B。B 对收到的 SYN 包回复 ACK 的目的是验证先前的连接是否失效,以便采取相应处理。若 A 的连接仍在,则正常处理 ACK 包。若连接已不在,此 SYN 包试图发起新连接,mantisbt源码解析收到 ACK 后,A 会立即回复 RST 包,序列号等于 ACK 包的序列号,B 收到合法的 RST 包后释放连接。若 A 想重新与 B 创建连接,则可再次发送 SYN 包。内核源码分析
使用 SystemTap 工具插入探针,观察内核函数 tcp_send_ack 的调用过程。在端口号为 时,打印函数调用堆栈。通过 SystemTap 脚本执行后,发现 ACK 包经过了 tcp_validate_incoming 和 tcp_send_challenge_ack 函数。RFC 提出了 ACK Throttling 方案,限制每秒最多发送 个 Challenge ACK 报文,通过 sysctl 函数可以调整此限制。RST 攻击
RST 攻击通过伪造 RST 包关闭正常连接。攻击难点在于构造序列号落在对方滑动窗口内的包。实验中,启动 tcpkill 工具并发送 RST 包,观察服务端与客户端进程退出。tcpkill 通过 libpcap 库抓取符合条件的包,从而获取序列号,伪造 IP 发送 RST 包。此外,介绍 killcx 工具,用于处理僵死连接。工具介绍
杀掉 TCP 连接的工具包括 tcpkill 和 killcx。tcpkill 假冒 IP 发送 RST 包,依赖有数据传输的连接才能获取序列号。killcx 是一个 perl 编写的脚本,可以在任何 TCP 连接状态下关闭连接。 总结,本文通过实验、内核源码分析和工具介绍,详细解答了 ESTABLISHED 状态连接为何响应 SYN 包,以及如何使用 Challenge ACK、python免费源码ACK Throttling、tcpkill 和 killcx 来处理相关连接问题。网络测量工具集合(ZMap、XMap、scamper、mtr、ZGrab 2.0,pyasn(IP2AS) 持续更新ing...)
网络高速扫描工具ZMap和XMap提供快速而高效的网络扫描能力,支持IPv6和IPv4,以及ping、traceroute等技术,适用于大规模网络分析。
scamper是一款由CAIDA开发的工具,用于积极探测互联网,分析拓扑结构和性能。scamper支持IPv6和IPv4探测、ping、traceroute以及MDA traceroute、radargun、ally、mercator、sting、speedtrap、DNS探测等技术,是CAIDA宏观拓扑项目中的探针。开发者Matthew Luckie提供了scamper的C语言源码,用户可以自行构建和使用。
Yarrp是一种针对互联网规模快速网络拓扑发现的下一代主动网络拓扑发现技术。它在短时间内以超过Kpps的速度进行探查,能够在不到5分钟内发现超过K个路由器接口。Yarrp支持TCP、UDP-paris和ICMP-paris探测,适用于IPv4和IPv6环境。Yarrp基于C++,在Linux和BSD系统上运行,并以BSD许可开源。-10的源码
mtr结合了traceroute和ping程序的功能,成为一个集成的网络诊断工具。它通过与指定目标主机进行连接,确定网络跳点的地址,并发送ICMP ECHO请求以评估链路质量,同时提供运行统计信息。mtr提供入门指南和官方网站,用户可以获取详细信息和源代码,了解其在估计往返时间波动(interarrival jitter)方面的优势。使用mtr进行诊断时,重要的是参考RFC文档中的相关部分,了解代码中涉及的计算方法,如在ui/net.c #line处的代码实现。
ZGrab 2.0是一款专注于应用层协议扫描的工具,适用于快速识别和分析网络流量中的协议特征。通过安装和使用ZGrab 2.0,用户可以进行高效的应用层扫描。
对于高速DNS查询的需求,ZDNS提供了一个命令行界面的解决方案,支持高效率的DNS查找操作。
快速IP2AS映射是网络研究中的一项重要任务。pyasn是用于批量IP2AS映射的Python工具,支持IPv4和IPv6,通过离线查询历史路由数据(如MRT/RIB BGP archive),pyasn能够显著提高查询速度和准确性。使用pyasn进行IP到自治系统编号(ASN)的映射,可利用routeviews等历史路由数据源,以确保结果的可靠性和精确性。
实战|Java 测试覆盖率 Jacoco 插桩的不同形式总结和踩坑记录
本文为霍格沃兹测试学院优秀学员对 Jacoco 的总结和对使用过程中可能遇到的坑点记录。测试开发进阶学习,文末加群。一、概述
测试覆盖率是老生常谈的话题。本文主要关注Java后端的测试覆盖率。由于历史原因,公司基本不做单元测试(UT),编译pppd源码因此我们更关心手工执行、接口执行(人工使用Postman等)、接口自动化、WebUI自动化对应用系统的覆盖度。
尽管Jacoco已流行多年,各种文档和帖子描述得很详细,但大多数文章都是针对特定形式的总结和使用方法。负责整个公司项目的覆盖率任务的人们需要一一研究和应对,经历多次入坑、出坑。
今年上半年负责公司不同类型的项目覆盖率统计技术的适配,对不同形式的项目有了一定的了解,记录下来,希望对他人有所帮助。本文由个人能力有限、表达能力有限所写,如有错误,欢迎指正。
二、投入覆盖率之前的思路
了解了Jacoco的部分机制,知道它提供了许多强大的功能,以满足不同形式的项目需求。Jacoco提供了API,可以屏蔽不同类型项目带来的困扰。
官方API示例地址:Jacoco.org/Jacoco/trunk...
使用API进行操作的好处包括:
屏蔽不同方式的构建部署。若想将此功能集成到平台中,API无疑是很好的方式。只需将Jacoco插桩到测试服务器上,暴露TCP IP和端口,剩余提取代码执行数据、生成覆盖率报告,就可以统一方式执行。Jacoco官方提供了Maven插件方式、Ant的XML方式,均有对应的dump和report进行覆盖率数据的dump和报告生成。三、项目梳理
公司是个老牌公司,项目杂乱无章,技术五花八门,至今仍有使用JDK6的项目。影响Jacoco使用过程的因素可能包括:
JDK版本:公司使用JDK6、7、8,JDK6是个分水岭,其他版本基本可用JDK8适配。构建方式:Maven构建、ANT构建,也有使用Gradle的可能。启动方式:Java -jar启动、通过命令行启动、使用Tomcat启动WAR包(打包方式灵活)。部署场景:线上部署、测试部署、开发部署可能采用不同方式,开发者多倾向于使用插件方式启动,因为快速且集成IDE。四、Jacoco插桩的本质
Jacoco介入部署过程的本质是插桩,可以是编译时插桩或运行时插桩。选择on-the-fly模式。
本质在于,在应用启动过程中,让Jacoco相关工具介入部署过程,即介入class文件的加载,在加载class时动态改变字节码结构,插入Jacoco的探针。以TCPserver方式进行插桩,应用启动时在端口上开启TCP服务,接收执行覆盖率信息并保存。提供API连接TCP服务,进行覆盖率数据的dump操作。
五、不同形式的插桩配置
介入启动过程需要一个jar包:Jacocoagent.jar。配置需要介入的jar包路径、过滤class文件、TCPserver端口号、访问地址等。针对不同启动方式,需要在相应的启动参数中加入配置,如在java命令、war包启动、Maven命令、ANT构建、Java -jar启动时加入相应的配置参数。
六、注意事项汇总
在配置过程中,需注意端口管理、变量作用域、代码适配性等问题,确保配置的正确性和兼容性。
七、说给想做平台的你
对于想做增量覆盖率的平台,需要自动化配置,集成devops平台,规划端口,使用API进行数据收集,确保不同启动方式的兼容性。
八、一些坑
在配置Ant构建时,确保compile阶段配置正确,避免数据无法注入。在多服务器部署负载均衡时,需要循环连接不同服务器的IP:port进行数据收集。确保编译环境的一致性,可以使用sftp下载代码。注意数据的及时保存和收集,防止覆盖率数据丢失或不准确。
九、补充API相关代码覆盖率数据的获取
可以封装覆盖率数据生成报告时所需的属性,如数据文件、源码、class文件等,生成报告时自动获取这些信息。若需要具体实现代码示例或获取更多代码,请参阅GitHub仓库。
十、总结
本文是对Java端覆盖率探索的细化总结,参考了相关资料和课程。期待与大家分享和探讨,共同进步。
想问一下大家都是怎么做渗透测试的呢?
这个要根据个人的实际情况来决定的,比如你先要去了解什么是渗透测试:
1、渗透测试属于信息安全行业,准确的说是网络计算机/IT行业
2、现在你知道了它的行业属性,那么你是否具备一些这个行业的知识呢?
3、具备的话学习起来比较简单,直接去学习渗透测试实战就行,不具备接着往下看
4、现在知道它行业属性,你大概就能清楚需要些什么样的基础知识了;下面是我从非计算机网络相关专业的同学想要学习渗透测试必须掌握的知识。
5、前期入门大概需要掌握或者说了解以下知识点:
1)了解基本的网络知识,例如什么是IP地址(...)去掉点是扣扣学习群,IP地址的基本概念、IP段划分、什么是A段、B段、C段等2)广域网、局域网、相关概念和IP地址划分范围。
3)端口的基本概念?端口的分类?
4)域名的基本概念、什么是URL、了解TCP/IP协议、
5)了解开放式通信系统互联参考模型(OSI)
6)了解http(超文本传输协议)协议概念、工作原理
7)了解WEB的静态页面和WEB动态页面,B/S和C/S结构
8)了解常见的服务器、例如、Windows server、Linux、UNIX等
9)了解常见的数据库、MySQL、Mssql、、Access、Oracle、db2等
)了解基本的网络架构、例如:Linux + Apache + MySQL + php
)了解基本的Html语言,就是打开网页后,在查看源码里面的Html语言
)了解一种基本的脚本语言、例如PHP或者asp,jsp,cgi等
然后你想学习入门,需要学习以下最基础的知识:
1、开始入门学习路线
1)深入学习一种数据库语言,建议从MySQL数据库或者SQL Server数据库、简单易学且学会了。
其他数据库都差不多会了。
2)开始学习网络安全漏洞知识、SQL注入、XSS跨站脚本漏洞、CSRF、解析漏洞、上传漏洞、命令执行、弱口令、万能密码、文件包含漏洞、本地溢出、远程溢出漏洞等等
)工具使用的学习、御剑、明小子、啊D、穿山甲(Pangolin)、Sqlmap、burpsuite抓包工具等等
2、Google hacker 语法学习
3、漏洞利用学习、SQL注入、XSS、上传、解析漏洞等
4、漏洞挖掘学习
5、想成为大牛的话、以上都是皮毛中的皮毛,但前提是以上的皮毛都是最基础的。
6、Linux系统命令学习、kali Linux 里面的工具学习、Metesploit学习
7、你也可以找一些扣扣群去和大佬交流,比如上面的IP去掉点就是,里面有很多的教程。
8、没事多逛逛安全论坛、看看技术大牛的文章、漏洞分析文章等