1.linux内核源码:网络通信简介——网络拥塞控制之BBR算法
2.systemtap使用指南
3.敏感文件目录探测方法大全
4.使用HTTPX进行网站存活探测 - 渗透测试教程
5.源码阅读忆丛(51)eBPF
6.Elasticsearch 源码探究 ——故障探测和恢复机制
linux内核源码:网络通信简介——网络拥塞控制之BBR算法
从网络诞生至十年前,顶部TCP拥塞控制采用的探测经典算法如reno、new-reno、源码bic、顶部cubic等,探测在低带宽有线网络中运行了几十年。源码高仿5173源码然而,顶部随着网络带宽的探测增加以及无线网络通信的普及,这些传统算法开始难以适应新的源码环境。
根本原因是顶部,传统拥塞控制算法将丢包/错包等同于网络拥塞。探测这一认知上的源码缺陷导致了算法在面对新环境时的不适应性。BBR算法的顶部出现,旨在解决这一问题。探测BBR通过以下方式控制拥塞:
1. 确保源端发送数据的源码速率不超过瓶颈链路的带宽,避免长时间排队造成拥塞。
2. 设定BDP(往返延迟带宽积)的上限,即源端发送的待确认在途数据包(inflight)不超过BDP,换句话说,双向链路中数据包总和不超过RTT(往返延迟)与BtlBW(瓶颈带宽)的乘积。
BBR算法需要两个关键变量:RTT(RTprop:往返传播延迟时间)和BtlBW(瓶颈带宽),并需要精确测量这两个变量的值。
1. RTT的定义为源端从发送数据到收到ACK的耗时,即数据包一来一回的时间总和。在应用受限阶段测量是最合适的。
2. BtlBW的测量则在带宽受限阶段进行,通过多次测量交付速率,将近期的最大交付速率作为BtlBW。测量的时间窗口通常在6-个RTT之间,确保测量结果的准确性。
在上述概念基础上,BBR算法实现了从初始启动、spring autowired源码原理排水、探测带宽到探测RTT的四个阶段,以实现更高效、更稳定的网络通信。
通信双方在节点中,通过发送和接收数据进行交互。BBR算法通过接收ACK包时更新RTT、部分包更新BtlBW,以及发送数据包时判断inflight数据量是否超过BDP,通过一系列动作实现数据的有效传输。
在具体的实现上,BBR算法的源码位于net\ipv4\tcp_bbr.c文件中(以Linux 4.9源码为例)。关键函数包括估算带宽的bbr_update_bw、设置pacing_rate来控制发送速度的bbr_set_pacing_rate以及更新最小的RTT的bbr_update_min_rtt等。
总的来说,BBR算法不再依赖丢包判断,也不采用传统的AIMD线性增乘性减策略维护拥塞窗口。而是通过采样估计网络链路拓扑情况,极大带宽和极小延时,以及使用发送窗口来优化数据传输效率。同时,引入Pacing Rate限制数据发送速率,与cwnd配合使用,有效降低数据冲击。
systemtap使用指南
Systemtap 是一种工具,用于开发人员和管理员编写和复用简单脚本以深入检查 Linux 系统活动。它允许快速提取、过滤和汇总数据,安全地诊断复杂性能或功能问题。
使用 Systemtap,最简单的桃源码头图片探测类型是跟踪一个事件,例如在 open 系统调用执行时打印特定进程信息及参数。
Systemtap 支持多种内置事件,并可自定义额外事件,这些事件通过统一命名的点分隔参数化标识符语法定义。编写脚本时,需指定探测位置及打印内容。
Systemtap 的脚本通过翻译成 C 代码并运行系统 C 编译器来创建内核模块,模块在内核中激活所有探测事件。模块加载时,探测到的事件触发编译的处理程序运行。
跟踪事件的处理程序可以使用丰富控制结构,类似于 awk 语法,用于描述算法。脚本支持条件语句,允许限制跟踪或逻辑特定于进程或感兴趣的地方。
Systemtap 脚本可以使用变量、表达式和函数,支持 C 和 awk 风格的语法,以及字符串和数字运算。全局变量和特殊“目标变量”用于访问探测点上下文。
目标变量允许访问内核源代码中的值,并提供如地址、结构打印、变量范围和类型转换功能。全局变量用于在探测程序之间共享数据。
脚本还可以包含自定义函数,定义在脚本中的任何位置,并接受字符串或数字参数,返回单个字符串或数字。
Systemtap 提供关联数组,用于在不同探测程序之间共享数据,timer_gettime源码数组实现为哈希表,并且必须声明为全局变量。数组支持设置、查找、迭代和测试元素。
探测程序执行受到时间限制,避免了内存动态分配,且具有安全机制,如限制函数调用嵌套深度和检测潜在危险操作。
Systemtap 通过 tapset 脚本库支持共享,允许建立相互构建的脚本库,这些库可以自动解析未定义的全局符号以在脚本中进行搜索。
嵌入式 C 代码功能允许使用安全且正确的 C 代码,以补充探测功能,如遍历全局链表。此代码在内核模块中转录,并需遵守安全约束。
为了防止名称冲突,建议遵循 Systemtap tapset 开发人员的命名约定,以避免翻译或运行时错误。
Systemtap 的安装方式包括默认目录和额外目录选项,以及使用 /usr/share/systemtap/tapset/ 和 sourceware.org 等资源。
总结,Systemtap 提供了一种实用的工具,让开发者和管理员能够深入分析 Linux 系统活动,诊断性能和功能问题。尽管存在安全风险,对于内核程序员而言,它提供了访问内核信息和增强理解的有效途径。
敏感文件目录探测方法大全
敏感文件目录探测方法大全
敏感文件、敏感目录的争霸天下ol源码探测通常依赖于工具与脚本。除了资深专家的手动搜索,自动化手段同样高效。以下内容概述了常见敏感文件或目录类型,以及适用于敏感文件目录探测的方法。
敏感文件、敏感目录通常包括后台入口如 `admin/`、`robots.txt`、`数据库log`、`sitemap.xml`、`mysql.sql`、`licence.txt`、`Git`、`hg/Mercurial`、`svn/Subversion`、`bzr/Bazaar`、`Cvs`、`WEB-INF`、备份文件、配置文件等。
常用的后台入口有 `admin/`、`admin.后缀`、`admin/login.后缀`、`manage`、`webmanager` 等。
常用的探测方法包括:
1. **工具扫描**:使用御剑、爬虫工具(如AWVS、Burpsuite)、搜索引擎(如Google、Github)、wwwscan、BBscan(由lijiejie编写)、GSIL(由FeeiCN编写)等。
2. **特定工具**:如wfuzz(下载:github.com/xmendez/wfuzz... 使用:wfuzz.readthedocs.io/en... gh0st.cn/archives/-...)和dirseach(github.com/maurosoria/d...)。
3. **web爬虫**:借助如Burpsuite、awvs等软件进行爬行。
4. **搜索引擎**:通过特定搜索语法,如 `site: xxx.xxx`、`system site: xxx.xxx`、`内部 site: xxx.xxx`、`site:目标`、`admin`、`login`、`后台`、`管理中心` 等。
5. **查看源码**:直接查看网站源代码,有时首页或新闻中心中会有后台路径的线索。
6. **源码审计**:针对已知CMS进行渗透测试,审计后台代码。
7. **漏洞利用**:利用IIS短文件路径漏洞、SVN源码泄露、目录遍历、备份文件、插入任意URL(通过referer获取后台)、XSS或注入技术等。
8. **社会工程**:联系网站客服或管理员,通过可信理由获取后台访问权限。
9. **技术支持目录**:查找网站底部或CMS相关页面,寻找专门的技术支持后台入口。
. **旁站C段子域名**:敏感文件或后台可能存在于主站之外的C段子域名上。
敏感文件目录探测是一个复杂而细致的过程,需要综合运用多种手段,并结合特定情境进行深入挖掘。随着技术发展,新的探测方法与工具不断涌现,掌握这些方法对于保障网络安全至关重要。
使用HTTPX进行网站存活探测 - 渗透测试教程
HTTPX是一个强大且多功能的HTTP工具包,特别适合进行网站存活探测和渗透测试。它借助retryable" | | " | httpx -probe -sc -path "/login.php"`,检测特定路径是否存在。源码阅读忆丛()eBPF
eBPF:革新内核的瑞士军刀
eBPF的发展如火如荼,其势头正盛,似乎有潜力彻底重塑Linux内核的可能。初识eBPF,源于对复杂源码的渴望,Hotspot、V8等大型项目让人望而却步,于是选择了一款小巧且充满潜力的eBPF来探索。深入学习后发现,eBPF的内容丰富多样,不仅提供了强大的调试工具,还能深入探测性能,勾起了我浓厚的兴趣。
通过百度和阅读电子书《BPF之巅-洞悉Linux系统和应用性能》,我对eBPF的原理有了初步了解。书中的前五章着重介绍了eBPF的原理和技术,而后续章节则详细阐述了其工具的使用方法。这些工具的功能确实强大,但更多是在调试器层面的延展。我尤其对性能探测工具感到好奇,这促使我进一步深入研究。
对eBPF原理的兴趣驱使我追溯其发展脉络。从年eBPF的早期版本开始,我发现其基础架构已足够强大,足以替代iptables。从年到年,这个领域似乎并未取得显著进展,这可能是因为它被忽视了。
随着深入研究Linux 4.1版本(年发行),我浏览了samples/bpf和kernel/bpf目录下的源代码,重点分析了libbpf.c、bpf_load.c、core.c、syscall.c、verifier.c等关键文件。这些代码揭示了eBPF的加载和编译机制,包括在用户态标记并记录映射和函数调用,然后在内核态通过verifier.c的bpf_check(...)函数实现映射地址或函数地址的真实替换。至于代码的动态编译和优化,我选择跳过,因为涉及到的JIT等技术我已经较为熟悉。
在理解eBPF动态插桩和静态插桩技术的基础上,我回顾了Linux 2.6.版本(年)的trace静态插桩技术。这个版本的trace功能较为基础,主要记录函数调用地址,但提供快速写入功能,即使数据来不及读取也会被覆盖。然而,读取数据时需要比较所有CPU的环形缓冲区记录,找到最久的记录。虽然功能有限,但trace静态插桩在内核重要函数的调用跟踪中发挥了作用。
此外,我还研究了Linux 2.6.版本的kprobes动态插桩技术。kprobes提供了一种动态跟踪函数调用的方法,主要通过kernel/kprobes.c和arch/x/kernel/kprobes.c文件实现。reenter_kprobe函数处理调试中断时的重入问题,而kretprobe则将第二个CPU核单步执行,避免冲突。jprobe则通过插入代码改变程序流程,理论上避免了重入问题。
在回顾了这些源码后,我发现它们的难度并不高,结合网络资源,我能够顺利阅读并理解。我仅记录了当时重点思考的部分,这些部分涉及了源码的关键功能和实现细节。
Elasticsearch 源码探究 ——故障探测和恢复机制
Elasticsearch 故障探测及熔断机制的深入探讨
在Elasticsearch的7..2版本中,节点间的故障探测及熔断机制是确保系统稳定运行的关键。故障监测主要聚焦于服务端如何应对不同场景,包括但不限于主节点和从节点的故障,以及数据节点的离线。
在集群故障探测中,Elasticsearch通过leader check和follower check机制来监控节点状态。这两个检查通过名为same线程池的线程执行,该线程池具有特殊属性,即在调用者线程中执行任务,且用户无法直接访问。在配置中,Elasticsearch允许检查偶尔失败或超时,但只有在连续多次检查失败后才认为节点出现故障。
选举认知涉及主节点的选举机制,当主节点出现故障时,会触发选举过程。通过分析相关选举配置,可以理解主节点与备节点之间的切换机制。
分片主从切换在节点离线时自动执行,该过程涉及状态更新任务和特定线程池的执行。在完成路由变更后,master节点同步集群状态,实现主从分片切换,整个过程在资源良好的情况下基本为秒级。
客户端重试机制在Java客户端中体现为轮询存活节点,确保所有节点均等机会处理请求,避免单点过载。当节点故障时,其加入黑名单,客户端在发送请求时会过滤出活跃节点进行选择。
故障梳理部分包括主master挂掉、备master挂掉、单个datanode挂掉、活跃master节点和一个datanode同时挂掉、服务端熔断五种故障场景,以及故障恢复流程图。每种场景的处理时间、集群状态变化、对客户端的影响各有不同。
最佳实践思考总结部分包括客户端和服务器端实践的复盘,旨在提供故障预防和快速恢复策略的建议。通过深入理解Elasticsearch的故障探测及熔断机制,可以优化系统设计,提高生产环境的稳定性。