自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

诗酒趁年华

Life-long Learning & Loving

  • 博客(59)
  • 资源 (2)
  • 问答 (8)
  • 收藏
  • 关注

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

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

2024-07-17 13:57:13 558

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

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

2024-07-11 11:02:36 942

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

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

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

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

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

2024-05-15 15:19:47 426

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

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

2024-04-29 16:24:53 801

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

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

2024-03-30 23:34:26 795

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

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

2024-03-22 10:18:55 654

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

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

2024-03-11 09:50:12 436

原创 DPDK源码分析之l2fwd

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

2024-03-11 09:49:41 717

原创 DPDK源码分析之hello_world

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

2024-03-11 09:49:04 842

原创 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 407

原创 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 637

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

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

2024-03-11 09:46:03 507

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

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

2024-03-11 09:45:20 540

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

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

2024-03-11 09:44:22 940

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

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

2024-03-11 09:41:48 502

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

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

2024-03-11 09:40:37 231

原创 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 596

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

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

2024-03-11 09:39:32 248

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

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

2024-03-11 09:38:37 348

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

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

2024-03-11 09:38:06 331

原创 打造Go开发流水线CICD

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

2024-03-08 10:02:57 1048

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

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

2024-03-08 10:02:10 911

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

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

2024-03-08 09:58:54 369

原创 网络入侵检测系统之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 1019

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

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

2024-03-08 09:57:07 422

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

也算是一个概览

2024-03-08 09:56:28 248

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

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

2024-03-08 09:55:57 745

原创 网络入侵检测系统之Suricata(十一)--TCP重组实现详解

TCP重组一直是入侵检测系统中最为重要也是最难的一部分,它涉及到全流量的缓存,因此存储消耗十分巨大,据统计100万的会话就要产生1G~10G的内存缓存,因此设计一套TCP重组优化的算法十分必要,目前优化的办法有两种,一种是尽量不去TCP重组减少缓存包括红绿名单,配置,抽样算法,另一种就是将重组下沉到硬件例如FPGA,减少以软件方式缓存。

2024-03-08 09:55:06 1078

原创 网络入侵检测系统之Suricata(十)--ICMP实现详解

【代码】网络入侵检测系统之Suricata(十)--ICMP实现详解。

2024-03-08 09:54:17 921

原创 网络入侵检测系统之Suricata(九)--Storage实现详解

数据区的真实创建需要用到下面的结构体Host,我理解它是一种钥匙,上电时会预分配一些host对象,创建host对象时,并非只分配sizeof(host),而是多分配出若干个void *,这个数量和注册storage数据区一致。后面这个host通过偏移sizeof(host)+id,这样就能找到各个数据区了,每个host都会分配自己的数据区,彼此不干扰。Host对象负责数据区的读写,它可以调用注册的malloc分配size的字节数,也可以set为其他的数据区指针。

2024-03-08 09:53:25 148

原创 网络入侵检测系统之Suricata(八)--Option实现详解

【代码】网络入侵检测系统之Suricata(八)--Option实现详解。

2024-03-08 09:52:36 367

原创 网络入侵检测系统之Suricata(七)--DDOS流量检测模型

大量变源变端口的UDP Flood会导致依靠会话转发的网络设备,性能降低甚至会话耗尽,从而导致网络瘫痪。针对 Web 服务在第七层协议发起的攻击,正常的有效的数据包 不断发出针对不同资源和页面的 HTTP 请求,并尽可能请求无法被缓存的资源(DB查询等),这样就极大加重了服务器的计算和IO资源,从而导致瘫痪。攻击者截取IP数据包后,把偏移字段设置成不正确的值,接收端在收到这些分拆的数据包后,就不能按数据包中的偏移字段值正确组合出被拆分的数据包,这样,接收端会不停的尝试,以至操作系统因资源耗尽而崩溃。

2024-03-08 09:51:54 1243

原创 网络入侵检测系统之Suricata(六)--规则加载模块代码详解

Suricata规则加载流程图

2024-03-08 09:50:02 260

原创 网络入侵检测系统之Suricata(五)--Worker Model线程调度详解详解

这里的实现可以类比suricata PCAP_FILE_DEV 模式,读取pcap文件并将其封装在Packet结构中,各个模块都靠packet结构传递,然后依次进行解码,重组,检测,解析,输出日志。我们NIDS系统雏形版本目前采用的single模式,即。

2024-03-08 09:49:12 302

原创 网络入侵检测系统之Suricata(四)--初始化模块代码详解

DetectEngineCtx_->sig_list + sig_cnt->排序ByAction,byFlowbits,,ByFlowvar,ByPktvar,ByHostbits,ByIPPairbit,ByPriority->runtime match structure (siggroup),siggroup的过程目前看是把之前的所有规则list通过ip,端口号和流分组到一个链表数组(sgh,并维护了一个 sigMask(规则有哪些匹配项)Suricata对“运行模式”这个概念也进行了封装。

2024-03-08 09:48:29 1069

原创 超好用的golang工具分享

在并发环境处理 error 的场景下,或者在同一个 goroutine 中合并多个错误的场景下,Go 提供了很不错的包可以让多个错误的处理变得简单:来看看如何合并由单个 goroutine 生成的多个 error。主要分析服务运行过程产生的:阻塞同步的堆栈信息,所有的goroutine堆栈信息,活动对象的内存分配信息,互斥锁的竞争持有者的堆栈,默认进行30s的CPU采样信息,查看创建新OS线程的堆栈信息等等。出来,一个与单元测试结合使用的工具。在关于使用 Go 语言的时候,开发者面对最大的挑战的。

2024-03-07 14:34:51 910

原创 【翻译】零信任架构准则(五)Don‘t trust any network

知道连接的一方的身份。身份的特定的、细粒度的本质是零信任和零信任交换的基石——不仅对人,也对设备、可连接的东西和工作负载。这些实体必须提供一个有效的身份来区分自己,以便通过正确的控件集访问允许的资源,并应阻止所有其他访问权限。身份给了零信任一个谁在联系,他们的角色和责任的想法,但缺乏围绕联系的上下文。身份最初被认为是基于是否经过身份验证的初始实体提供“是”或“否”的二进制输出的能力。现在,我们必须将谁正在连接的细节与该连接的上下文联系起来,这允许对最小特权零信任的额外控制。

2024-03-07 14:33:49 752

原创 【翻译】零信任架构准则(四)Authenticate and Authorise everywhere

其次,为了增加可用性,防止因误报而阻止了合法的用户请求,我们应该在首次定义策略时,采取短时间内记录而不是直接拒绝访问,在一段评估期间,我们定期审核日志,持续衡量策略的有效性(灰度),在此过渡期间我们可以采用传统的安全来阻止恶意请求。最后,配置策略时,我们需要做一些用户限制,不能随意让普通用户配置重要策略,为了方便溯源和审计,我们也需要记录用户的操作日志,当然如果确信某些服务的用户是真实可靠的,那么也可与基于身份构建一个白名单以授权服务之间的连接。翻译:zhihu于顾而言。

2024-03-07 14:32:50 894

原创 【翻译】零信任架构准则(三)Assess user behaviour

在寻求建立系统安全性的信任值时,用户行为,服务或设备的健康状况是非常重要的指标,我们应该持续监控来自用户和设备的身份和健康信息,并把这些动态信息也输入到策略引擎中,让其动态的做出访问决策。例如,我们想知道我们的用户试图从哪里访问我们的服务,然后这些行为(用户访问时间或频次或关注点)或访问的位置信息都可以作为signal帮助策略引擎做出访问决策。

2024-03-07 14:31:59 599

MFC实现图片的读取存盘

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

2016-02-27

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

TA关注的人

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