比特币源码研读(一)之密钥和地址到底是个啥关系

比特币源码研读(一)之密钥和地址到底是个啥关系
最近有幸加入了比特币源码研读班,很开心能和那些对比特币了解或者感兴趣的朋友一起交流学习。 这是我入班的第一篇文章,并且以后每周都要有至少一篇文章更新,理论上总要写一些鼓励自己的话。豪言壮语就不说了,只想引用一句颇有这里的话。“一生坚持做一件事,一定能够创造奇迹。因为坚持一生本身就是奇迹。” 好了,煽情完毕。现在我们来聊聊密钥和地址到底是个啥。 先说密钥。在《精通比特币》一书中曾...

Linux下使用shadowsocks(以ubuntu16.04为例,非服务器)

Linux下使用shadowsocks(以ubuntu16.04为例,非服务器)
  系统环境:Ubuntu 16.04 安装 Linux不同的发行版执行的命令如下(最好在root下运行以下命令,原因我下面会说明): Debian / Ubuntu: apt-get install python-pip pip install shadowsocks CentOS: yum install python-setuptools && easy_install pip pip install shadowsocks 配置 sudo vim /etc/shadowsocks.json //这里的json文件是自己创建的,不是系统自带 配置文件的内容大致...

suricata在netmap模式用autofp方式抓包有内存泄漏的相关信息

suricata在netmap模式用autofp方式抓包有内存泄漏的相关信息
说个小的发现。 suricata在运行netmap模式进行抓包的时候默认使用的是”workers”的工作方式。 由于其它的都是“autofp”的方式,所以就带着疑问上google上查了一下。没想到还真查到点东西。 https://redmine.openinfosecfoundation.org/issues/1717 这是论坛里找到的,大体意思是说在suricata 3的版本使用netmap模式并通过autofp的方式抓包会导致内存泄漏。 这里已给出的回复是,autofp不支持zero-copy,还有...

suricata在netmap模式无法抓包的原因

suricata在netmap模式无法抓包的原因
问题描述 suricata在很早就支持了netmap,但最近在用的时候却发现开启netmap抓包后总是获取不到数据包。 使用netmap自带的pke-gen工具测试,结果证明不是netmap的问题。 只能去suricata源码里查原因了。 问题定位 问题出在source-netmap.c文件的NetmapOpen函数中,具体位置如下: if (ioctl(pring->fd, NIOCREGIF, &nm_req) != 0) { SCLogError(SC_ERR_NETMAP_CREATE, ...

suricata 3.2 源码分析(IP数据包分片重组流程)

suricata 3.2 源码分析(IP数据包分片重组流程)
在网络通信中如果发送的IP包超过MTU值就会将IP包拆分成多个包发送。那么在suricata中对于这种拆分开得IP包又是如何处理的呢?下面我们一步一步来分析。 判断数据包是不是分片包是在DecedeIPV4这个函数中做的,具体位置是在 数据包解析模块->DecodeEthernet->DecedeIPV4 在DecedeIPV4这个函数中有如下一段代码: /* If a fragment, pass off for re-assembly. */ if (unlikely(IPV4_GET_IPO...

suricata 3.1 源码分析34 (FlowWorker处理流程3 – 流重用)

suricata 3.1 源码分析34 (FlowWorker处理流程3 – 流重用)
上一章提到了一个流重用的概念,这里主要说一下。根据code,所谓流重用仅仅重用了流的thread_id。其他内容都是新建流得来的,具体threa_id有什么作用以后看到了再分析,今天就说一下什么样的流可以被重用。 //这就是判断包所属的流是否能重用的函数 int TcpSessionPacketSsnReuse(const Packet *p, const Flow *f, const void *tcp_ssn) { if (p->proto == IPPROTO_TCP && p->tcph !...

suricata 3.1 源码分析33 (FlowWorker处理流程2 – FlowHandlePacket)

suricata 3.1 源码分析33 (FlowWorker处理流程2 – FlowHandlePacket)
void FlowHandlePacket(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p) { /* Get this packet's flow from the hash. FlowHandlePacket() will setup * a new flow if nescesary. If we get NULL, we're out of flow memory. * The returned flow is locked. */ //获取包对应的流,找不到就新建流,返回流指针,返回空说明内存不足 Flow *f = FlowGetFlowFromHash(tv, dtv...

suricata 3.1 源码分析32 (FlowWorker处理流程1)

suricata 3.1 源码分析32 (FlowWorker处理流程1)
TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data, PacketQueue *preq, PacketQueue *unused) { FlowWorkerThreadData *fw = data; /*FlowWorkerThreadInit中初始化,包含大量stats统计指标, decode指标在DecodeThreadVars中, tcp指标在StreamTcpThread中*/ void *detect_thread = SC_ATOMIC_GET(fw->detect_thread); //获取detect线程(3.1中的worker线程)的数据 S...

suricata 3.1 源码分析31 (RespondReject)

suricata 3.1 源码分析31 (RespondReject)
简介 RespondReject工作在worker线程,在FlowWorker模块之后对数据包进行处理。此处主要的作用是直接对符合过滤规则的数据包进行阻断并回复,从而使得数据包不会流入后续的操作模块。个人理解这点在IPS模式时会十分有用,可以阻断网络攻击、爬虫等。 原码分析 函数RespondRejectFunc只支持IPv4和IPv6的数据包回复,因此其中只调用了4个函数:RejectSendIPv4TCP、RejectSendIPv4ICMP、RejectSendIPv6TCP、R...
Copyright © 九毛的官方博客 保留所有权利.   Theme  Ality

用户登录