自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (2)
  • 问答 (8)
  • 收藏
  • 关注

原创 从0带你开始搭建ebpf开发环境

BPF 最初代表 Berkeley Packet Filter,但现在 eBPF(扩展 BPF)可以做的不仅仅是数据包过滤,这个首字母缩略词就不再有意义了。eBPF 现在被认为是一个独立的术语,不代表任何东西。在 Linux 源代码中,术语 BPF 仍然存在,而在工具和文档中,术语 BPF 和 eBPF 通常可以互换使用。原始 BPF 有时被称为 cBPF(经典 BPF),以区别于 eBPF。eBPF是一项源于Linux内核的革命性技术,它能够在诸如操作系统内核这样的特权环境下运行沙盒程序。

2025-03-24 12:01:19 345

原创 StrongSwan跨平台IPsec ESP报文解密方法

在基于Strongswan搭建IPsec站点到站点VPN的实际运维中,当遇到两侧流量选择器(Traffic Selector)定义的数据流无法互通时,常规的排障手段是通过Wireshark抓包分析。命令直接获取安全关联(SA)的状态信息,包括SPI值、加密算法和密钥等核心参数,配合Wireshark的ESP预共享密钥配置即可实现报文解密。这边,我将详细介绍方案二的方法,该方案的优势在于无需修改代码或额外组件,通过日志中的。编辑strongswan.conf文件。这样就可以看到解密的报文了,完美~

2025-03-24 11:59:44 427

原创 Windos10及以上系统实现SNAT功能

在Linux生态中,SNAT(Source Network Address Translation,源网络地址转换)的实现堪称优雅:通过iptables或nftables工具链,开发者只需数行命令即可完成地址伪装与流量重定向。然而,当场景切换到Windows平台时,这一基础网络功能的实现却面临双重困境——系统架构的天然差异与版本功能的严格阉割。Windows Server系列(如Windows Server 2016/2019/2022)通过内置的NAT网关组件和PowerShell命令集。

2025-02-05 15:50:25 877

原创 Linux跨平台编译StrongSwan Windows版

最近在研究市面上的Windows版本的IPSec客户端,但发现基本对于IKEv1都不支持(),所以对我来说,就剩一条路了,用strongwan的windows版本,我们登上官网下载一波发行包:真到下载页面就傻眼了,并没有给出windos版本:我迅速google了一番strongswan win都没有现成的包,最坏的情况真的出现了,我需要自己编译StrongSwan Windos版,苦笑中。

2025-02-05 15:28:45 625

原创 【Enjoy Kubernetes】2. 每位开发人员都应该了解的17 个Kubernetes最佳实践

在本文中,我将介绍一些在使用Kubernetes(K8s)时使用的最佳实践。作为最流行的容器编排系统,K8s是现代云工程师应该掌握的一项技能。K8s是一个众所周知的复杂系统,因此了解您应该做什么,不应该做什么,这会对您的部署如虎添翼。这些建议涵盖了应用程序开发、治理和集群配置这三个广泛的类别中的常见问题。

2024-12-27 16:56:27 1001

原创 【网络安全产品大调研系列】1. 漏洞扫描

Nmap试图确定服务协议 (如 ftp,ssh,telnet,http),应用程序名(如ISC Bind,Apache httpd,Solaris telnetd),版本号, 主机名,设备类型(如 打印机,路由器),操作系统家族 (如Windows,Linux)以及其它的细节,如是否可以连接X server,SSH协议版本 ,或者KaZaA用户名)。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。U1描述向关闭的UDP发包产生的回复的特征;

2024-12-20 18:01:18 1016 1

原创 【Enjoy Kubernetes】1. 基础入门

Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法;在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位 - 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。网络。

2024-12-19 10:44:14 994

原创 【Web攻击最佳实践】1. Race Window

当用户通过某种手段将两个请求同时抵达到服务端的应用程序,应用程序的两个线程会同时对数据库进行查询,进而都发现满足check条件,然后就会返回成功,然后再去更新数据库,因此此时现象是两个请求都被服务端认为满足条件了。您可能很想发送完整的正文,并依赖于不发送END_STREAM,但在某些使用 content-length 标头来决定消息何时完成,而不是等待END_STREAM的 HTTP/2 服务器实现上,这将中断。最后,发送保留的帧。您应该能够使用 Wireshark 验证它们是否位于单个数据包中。

2024-12-09 18:48:12 1159

原创 代理模式下获取客户真实IP

我们经常会在我们后端服务前加一层代理去做负载均衡或认证,比较有名的就是apisix。但是,这样会出现一些问题,比如说后端服务无法获取到客户真实的ip,显示的都是代理的ip,对于业务展示会有问题。

2024-11-14 11:41:10 990

原创 【笔记】Go Coding In Go Way

将接口类型定义放在与使用者更近的地方,可以使代码更加清晰和易于理解。使用者可以直接看到接口类型定义,了解接口类型的作用和使用方法。但注意:这并非是绝对的规则。

2024-11-07 17:22:40 896

原创 【笔记】Enjoy Docker

容器生态系统,包括核心技术,平台技术和支持技术。容器核心技术,包括容器规范,容器runtime,容器管理工具,容器定义工具,容器OS,Registries。容器核心技术使得容器能够在单个host上运行,容器平台技术能够让容器作为集群在分布式环境中运行。容器编排引擎就是docker swarm 和 k8s,容器管理平台就是rancher。容器对外提供的技术能力,包括容器网络,服务发现,监控,数据管理,日志管理,安全。虚拟机提供整台机器(服务器)的虚拟化。虚拟机模拟物理机的硬件组件,例如 CPU、内存、网络接口

2024-10-28 10:13:15 985

原创 What Is SASE

传统的sdwan出现是解决多分支互联,分支到总部的连接,集中统一管理,差异化的用户保障,用户体验的问题,但随着分支机构增多,那么就需要在分支机构的流量入口处额外继续堆砌原来的一些安全或者审计终端,即使是分支人数不多,数据中心边界明确到数字化转型业务上云,还有可能是多云,其次是移动办公,随时随地任何终端的办公诉求,这就带来的是网络边界消失的,到处都会有网络威胁,那么自然而然就就有安全的需求,能想到我们基于身份的访问边界,也就是ztna。

2024-09-03 10:43:08 1015

原创 【开源学习】FRP反向代理工具详解

右键点击「此电脑」-「属性」,找到「远程设置」,在「远程桌面」中勾选「允许远程连接到此计算机」,同时取消「仅允许运行使用网络级别身份验证的远程桌面的计算机连接」的勾选,然后点击「确定」。接下来我们就可以用控制端的 PC 测试一下,打开「远程桌面连接」,然后在「计算机」这一栏中输入云主机的公网 IP 后映射的端口号,比如我设置的 7002,然后点击连接。中点击「更改设置」,然后在下面找到「远程桌面」和「远程桌面(webSocket)」并分别勾选上「专用」和「公用」。

2024-07-17 13:57:13 1201

原创 【书摘】写作是门手艺

4.2 范畴结构:将事物分为几类,逐一说明。例如:“我们分析一下三个群体的社会声望:公务员阶层、私营企业主、农民工。4.3 评价结构:将一个事物或观点的正反两面分别来谈。一般先讨论正面。例如:“让我们分析一下运动对身体的影响。首先,适量运动对身体的好处有……;其次,不恰当运动也会损害健康……。4.4 时间结构:按照事物发展的顺序排列,一般按照时间先后顺序。例如:"让我们回顾一下中国的文字发展:首先,结绳记事阶段……;其次,甲骨文阶段……;再次……”

2024-07-11 11:02:36 1059

原创 【笔记】结合CTF理解Web安全

这三者关系是互补的,当SDL出现差错时,可以通过周期性的扫描,安全评估等工作将问题及时解决,而入侵检测(suricata),WAF(ModSecurity)等系统,则可以在安全事件发生后的第一时间进行响应,并有助于时候定损,如果三者只剩其一,都可能使得公司的安全体系出现短板,给攻击者带来可乘之机。

2024-05-31 10:59:44 1110 1

原创 【笔记】架构师思维养成之路

最近在某客上学习了一下郭东白老师的架构课,郭东白老师是原来阿里P10,是云计算和国际化电商平台领域的资深专家,他完整讲述了自身作为架构师该如何设计架构,以及对架构师的一些思考。整个囫囵吞枣般看完,好似虚竹一般,虽获得无崖子70年功力,但如何打出妙招,少侠我还多需努力。

2024-05-15 15:19:47 494

原创 【All In One】一文详解IPsec隧道

IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,用于在不安全的网络上(一般是互联网),建立安全的网络通信,一个很常见的场景就是,我们可以通过IPsec隧道将分公司和总部的内网连接起来,使分支的员工安全的访问总部的资源,按照传统的做法,公司需要租用运营商的专线,专门拉一条网线将总部和分公司组网,虽然更安全,体验更好,但这个价格也灰常的恐怖。当没有感兴趣的流量时,那么隧道最终被会被拆除,只有下次系统检测到感兴趣的流量来临时,隧道才会重新建立。

2024-04-29 16:24:53 1325

原创 再读人月神话,共鸣依旧

现如今我们有大量的框架套用,几天就能开发出一个产品,但这些如同批量生产的“口水歌”一般,慢慢就会被用户遗忘,软件开发者最终交付物不应该是产品,而应该是用户满意度。写代码不难,难的是idea,是那些具有创意的产品。

2024-03-30 23:34:26 934

原创 go-iptables功能与源码详解

介绍iptables之前我们先搬出他的父亲netfilter,netfilter是基于Linux构建基于无状态和有状态的互联网防火墙,且支持部署高可用集群如果你没有很多公网ip,那么你的局域网内部可以使用nat技术共享公网访问使用nat技术进行透明代理,你的公网暴露ip转换为你的真实的内网服务ip构建复杂的qos和策略路由器进一步的数据包操作(修改),如更改ip头部的tos/dscp/ecn位。

2024-03-22 10:18:55 837

原创 DPDK源码分析之网络基础知识

线程使用的底层函数和进程一样,都是clone。从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的。进程可以蜕变成线程。三级映射:进程PCB --> 页目录(可看成数组,首地址位于PCB中) --> 页表 --> 物理页面 --> 内存单元。两个线程具有各自独立的PCB,但共享同一个页目录,也就共享同一个页表和物理页面。在B +树中, 记录(数据)只能存储在叶节点上, 而内部节点只能存储键值。B +树的叶节点以单链接列表的形式链接在一起, 以使搜索查询更高效创建。

2024-03-11 09:50:12 532

原创 DPDK源码分析之l2fwd

2层转发,即对应OSI模型中的数据链路层,该层以Mac帧进行传输,运行在2层的比较有代表性的设备就是交换机了。当交换机收到数据时,它会检查它的目的MAC地址,然后把数据从目的主机所在的接口转发出去。交换机之所以能实现这一功能,是因为交换机内部有一个MAC地址表,MAC地址表记录了网络中所有MAC地址与该交换机各端口的对应信息。

2024-03-11 09:49:41 1159

原创 DPDK源码分析之hello_world

rte_eal_init后会启动若干个线程,个数与硬件核数或配置核数有关,每个子线程都有各自的与主线程通信的pipe管道,这个管道的作用是:当主线程想要分配某一个函数让子线程执行时,主线程会通过pipe发送消息(1个字节,内容无所谓),子线程读取到这个消息后会回送给主线程一个消息,然后子进程便开始执行主线程赋值的函数(lcore_hello),而主线程收到子线程的回信后,就可以去给其他的线程分配函数了。至此,各个子线程死循环执行线程函数eal_thread_loop,不断执行主线程分配的函数。

2024-03-11 09:49:04 936

原创 DPDK源码分析之rte_eal_init(二)

插件机制,就是动态库,首先会通过NOLOAD加载.so测试当前运行程序是否是动态链接库加载dpdk,如果是静态库加载直接返回,否则将会加载插件,插件的路径可以由-d参数指定,也可以由RTE_EAL_PMD_PATH(/usr/local/lib64/dpdk/pmds-21.0)指定,函数会加载-d指定的so或者将指定路径下满足条件的插件加入管理(eal_plugin_add),并通过dlopen加载。pci_scan_one (扫描/sys/bus/pci/devices目录下的设备)

2024-03-11 09:47:36 717

原创 DPDK源码分析之rte_eal_init(一)

而这些内部函数和宏是变化的。将driver注册到bus上,当用户需要使用AT24C01时,以AT24C01的参数构建一个对应device,注册到bus中,bus的match函数匹配上之后,调用probe函数,即可完成AT24C01的初始化,完成在用户空间的文件接口注册。总线(bus)是linux发展过程中抽象出来的一种设备模型,为了统一管理所有的设备,内核中每个设备都会被挂载在总线上,这个bus可以是对应硬件的bus(i2c bus、spi bus)、可以是虚拟bus(platform bus)。

2024-03-11 09:46:48 1293

原创 DPDK源码分析之DPDK技术简介

DPDK的线程可以作为控制线程,也可以作为数据线程。硬件的能力提升迅速,在一块小小的网卡上,处理器能够提供的性能已经远远超出了简单的数据包接收转发的需求,这在技术上提供了将许多原先软件实现的功能下移由网卡硬件直接完成的可能。DPDK采用了轮询或者轮询混杂中断的模式来进行收包和发包,此前传统的方法都是系统内核态的网卡驱动程序基于异步中断处理模式,我们都知道中断是十分耗性能的。其次DPDK充分利用指令的并发,比如说rte_memcpy,虽然功能只是简单的内存拷贝功能,但是它的实现使用了平台。

2024-03-11 09:46:03 623

原创 DPDK源码分析之DPDK基础概览

data-plane-development-kit,数据平面的开发套件,可以极大提高数据处理性能和吞吐量,为数据平面应用程序提供更多时间。DPDK并非是凭空使用了什么神秘的技术,而是多年的工程优化迭代和最佳实践的融合。(1)轮询技术为了减少中断处理开销,DPDK使用了轮询技术来处理网络报文。网卡收到报文后,直接将报文保存到处理器缓存中(有DDIO(Direct Data I/O)技术的情况下),或者内存中(没有DDIO技术的情况下),并设置报文到达的标志位。

2024-03-11 09:45:20 817

原创 分享一个小型C项目的万能Makefile

在 Makefile 中我们要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当 Makefile 被执行时,其中的变量都会被扩展到相应的引用位置上。

2024-03-11 09:44:22 997

原创 高效的文件监控框架inotify-tools

inotify-tools是由Red Hat开发的一款Linux文件系统监控工具,该工具高效率、细粒度、异步地对用户空间文件进行安全、高性能的监控,而在linux中一切皆文件,这就意味着你可以对设备,网络,CPU等等都可以进行监控,并做一定的action。inotify-tools内包含的so文件可以直接被复用在自己的项目工程中,或者直接使用工具内编译好的进程,inotifywait和inotifywatch进行文件监控,监控粒度非常细甚至软连接//被监控项目或者被监控目录中的条目被访问过。

2024-03-11 09:41:48 680

原创 如何着手分析一个行业?

1. 关注 gartner,hype,cycle。上面有各种产品和技术方向的。2. 挑几个感兴趣的火热的领域,比如网络安全的SASE,SDWAN。3. 继续查gartner SASE。4. 在油管和官网上查找相关技术资料。,找到第一象限或感兴趣的厂商。

2024-03-11 09:40:37 277

原创 golang的设计哲学

Google是一家顶尖的创新与大神集结的地方,员工的工作方式也很特别,叫做“20%Time”,即允许工程师拿出20%的时间来研究自己喜欢的项目。比如说语音服务Google Now、谷歌新闻Google News、谷歌地图Google Map上的交通信息等,全都是20%时间的产物,而Go语言也是诞生于此。2007年9月20日的下午,在谷歌山景城总部的一间办公室里,谷歌的大佬级程序员Rob Pike启动了一个C++工程的编译构建。按照以往的经验判断,这次构建大约需要一个小时。

2024-03-11 09:40:03 640

原创 golang迭代开发小项目--rpc远程调用

第一步,客户端向服务端发起rpc请求,这个请求的服务需要事先在服务端注册,也就是说服务端只会算加法,你来了一个减法请求,那显然会返回error第二步,客户端发起的请求参数会通过序列化及网络传输到达服务端网卡第三步,服务端收到请求报文后会通过反序列化获得执行参数,然后本地调用函数执行第四步,服务端会将计算结果以相同的方式发送会客户端第五步,客户端收到计算结果,这次rpc调用结束。

2024-03-11 09:39:32 304

原创 设计模式中学习golang高级特性(二)

上篇文章介绍了两个设计模式,分别是单例模式和简单工厂模式,里面也引出了一些常用的Go编程特性,例如包内函数和变量的私有化,sync.Once,协程,chan,等待组,接收者函数,接口类型interface,空结构体struct{}等等,那么我们继续通过设计模式来感受Go语法的独特之处。

2024-03-11 09:38:37 415

原创 设计模式中学习golang高级特性(一)

的,其内部是维护了一组数据结构, n 个线程和一个待执行队列。协程的切换是golang利用系统级异步 io函数的封装,这些封装的函数提供给应用程序使用,当这些异步函数返回 busy 或 bloking 时,golang 利用这个时机将现有的执行序列压栈,让线程去拉另外一个协程的代码来执行,

2024-03-11 09:38:06 390

原创 打造Go开发流水线CICD

作为一个敏捷开发者来说,当你充分理解完需求并完成了相应的模块设计拆分后,接下来最关键一步想必就是搞一搞基础设施,比如说gitlab代码仓库、harbor镜像仓库以及CI/CD等等,这些基础设施会成为提升后续项目质量以及开发效率坚实的护城河。那么,让我们先从打造一条Go项目开发的CI流水线开始吧。

2024-03-08 10:02:57 1324

原创 浅谈高并发的一些解决思路

中国互联网发展状况统计报告》指出,截至2020年6月,我国网民规模已经达到9.40亿,较2020年3月年增长3625万,除了如此庞大的用户基数,如今人们接入互联网的方式也越来越多样,小到智能手表,手机,大到笔记本,汽车,这也意味着实际使用互联网服务的entry point正以亿级的增长速率膨胀。也就是基于如此规模急剧扩大的环境下,服务厂商开始面临着两大压力,一个是更大的并发访问压力,一个是海量数据存储的压力。高并发问题是各大平台必须解决的问题之一,它关系着平台可以承担多大的用户量以及能否提供可靠的服务。

2024-03-08 10:02:10 1390

原创 网络入侵检测系统之Suricata(十六)--类suricata/snort规则自动维护工具

之前一直想写一个工具用来维护一套类suricata/snort规则,需要做到脚本运行后自动可以爬取预先设置的网站规则,然后会将规则进行一些处理并存为数据库,接着可以进行相关的统计,比如今天新增多少规则或者哪些规则已经废弃了。

2024-03-08 09:58:54 539

原创 网络入侵检测系统之Suricata(十五)--IPOnly/Radix Tree详解

IpOnly规则比较特殊,一般认为命中源和目的ip地址,再校验以下其他头部信息,就可以认为该报文 可以命中这条规则。Radix Tree本质是一个二叉树,由内部节点和外部节点,内部节点用于指示需要进行bit test的位置,并根据测试结果决定查找方向,外部节点则用于存储键值。Suricata具体实现在IPOnlyPrepare中,它分别建立了4个Radix Tree,代表源ipv4/6,目的ipv4/6。,路由表查找本质就是对目的ip进行 最长掩码匹配,而索引到路由表中的下一跳。

2024-03-08 09:58:01 1208

原创 网络入侵检测系统之Suricata(十四)--匹配流程

其实规则的匹配流程和加载流程是强相关的,你如何组织规则那么就会采用该种数据结构去匹配,例如你用radix tree组织海量ip规则,那么匹配的时候也是采用bit test确定前缀节点,然后逐一左右子树查询,Suricata也是如此,让我给大家简单介绍一下匹配流程。运行纯ip规则引擎匹配,由于是纯ip规则,所以只要目的ip和源ip可以匹配,我们就可以认为这条纯ip规则是可以命中的,我们把命中的规则sid加入到alert array中作为输出。

2024-03-08 09:57:07 709

原创 网络入侵检测系统之Suricata(十三)--网络安全威胁及攻击手段总览

也算是一个概览

2024-03-08 09:56:28 334

原创 网络入侵检测系统之Suricata(十二)--TCP重组优化

令常数 T1、TN 表示两个超时阈值,T1

2024-03-08 09:55:57 866

MFC实现图片的读取存盘

MFC实现图片的读取存盘,非常的好用有一定借鉴意义

2016-02-27

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除