2019-09-28 19:41
⁄ 工业·编程
⁄ 共 8619字
一 概述
中篇已经提到了钩子函数的注册,也知道最终数据进来是通过钩子函数处理,来实现防火墙的功能的。那么netfilter 内核是在什么时候调用钩子函数?钩子函数又是怎么实现防火墙对应的功能的?(本章主要讲钩子函数实现的过滤功能)
二 调用钩子函数
中篇知道钩子函数最终会注册挂载到 struct net 结构体下的struct netns_nf nf 结构体中,但是钩子函数又是在什么时候调用的呢?
前篇在讲解五链表提到一张图,如下图
其实钩...
iptables, netfilter, 防火墙阅读全文
2019-09-27 19:32
⁄ 工业·编程
⁄ 共 19695字
一 概述
前篇主要提到了用户空间iptables 1.3.5源码对规则的处理。但是并没有涉及内核空间netfliter 模块的处理。用户空间上的规则要生效最终肯定是通过传给内核空间的netfilter,让netfliter这个老大哥处理。因此抛出两个问题。
· 用户空间的是怎么获取内核空间已经存在的规则,或者用户空间是如何将需要netfilter处理的规则下发给内核?简而言之,规则在用户空间是如何跟内核空间交互的。
· netfilter 内核收到用户空间的请求...
iptables, netfilter, 防火墙阅读全文
2019-09-26 19:32
⁄ 工业·编程
⁄ 共 12722字
一 概述
iptables 其实不是真正的防火墙,我们可以把它理解为一个客户端代理,用户通过iptables 这个代理,将用户的安全设置执行到对应的“安全框架”中,这个安全框架才是真正的防火墙。这个框架的名称叫做netfilter 。
二 五链表(hook)
iptables 工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,...
iptables, netfilter, 防火墙阅读全文
2019-09-25 18:52
⁄ 工业·编程
⁄ 共 11203字
一 概述
前篇已经讲述了接收实现,而对于libpcap抓包的重要工具,本身其实也集成了packet_mmap抓包方式。那么既然可以用于捕获抓包。packet_mmap可以实现发送抓包吗?答案当然是肯定的。不过网上对于packet_mmap发送介绍少之又少。接下来会讲解packet_mmap发送数据包遇到的问题。
二 使用
packet_mmap原理跟接收原理一致,就不过重复讲述。唯一区别前篇原理中提到的状态标识,发送的状态标识跟接收的标识不一样。这后面会细说。...
Libpcap, tcpdump阅读全文
2019-09-24 18:42
⁄ 工业·编程
⁄ 共 8061字
一 概述
· 前篇了解了libpcap库如何实现抓包
· 中篇深入内核底层讲述了抓包的原理
· 后篇自己实现过抓包过程
上述篇章中讲述的只是原始的抓包流程。
原始的抓包流程?简单的说就是创建socket,设置bpf后,每次接收数据包都要调用recvfrom系统调用。而每次调用recvfrom内核底层抓到的数据包都需要用内核copy到用户。不管是系统调用,还是copy都是相当耗cpu性能的。而linux内核提供了一种更高效的抓包方式packet_mmap.
二 packet_m...
Libpcap, tcpdump阅读全文
2019-09-23 18:28
⁄ 工业·编程
⁄ 共 23021字
一 概述
在了解了tcpdump的原理后,你有没有想过自己去实现抓包过滤? 可能你脑子里有个大概的思路,但是知道了理论知识,其实并不能代表你完全的理解。只要运用后,你才知道哪些点需要注意,之前没有考虑到的。
二 如何实现抓包过滤
在写代码前,先捋下思路,和相应的理论知识。
libpcap 库中实现抓包关键代码
sock_fd = cooked ?
socket(PF_PACKET, SOCK_DGRAM, protocol) :
socket(PF_PACKET, SOCK_RAW, protocol);
libpcap...
Libpcap, tcpdump阅读全文
2019-09-22 18:22
⁄ 工业·编程
⁄ 共 8503字
一 概述
前篇通过libpcap分析,可以很清楚的发现其实用户层调用了三个系统调用,就实现了将内核网卡抓的包,返回给用户层。
· 1.创建一个socket ; sock_fd = cooked ?socket(PF_PACKET, SOCK_DGRAM, protocol) :socket(PF_PACKET, SOCK_RAW, protocol);
· 2 设置bpf 规则,使得规则在内核返回给用户的包就已经经过bpf过滤。
· 3 recvfrom 接收抓到的数据包
而对于内核做了那些呢?
· 链路层网口抓的包,是如何给到对应的socket...
Libpcap, tcpdump阅读全文
2019-09-21 18:13
⁄ 工业·编程
⁄ 共 14069字
一 概述
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 至于tcpdump参数如何使用,这不是本章讨论的重点。
liunx系统抓包工具,毫无疑问就是tcpdump。而windows的抓包工具,wireshark也是一款主流的抓包工具。wireshark 使用了winpcap库。tcpdump 基于 libpcap库。而winpcap库是类似于linux下的libpcap。 因此本文着重探讨libpcap库的原理。
二 libp...
Libpcap, tcpdump阅读全文
2019-09-20 18:02
⁄ 工业·编程
⁄ 共 5214字
一 概述
传统的应用编写时,每添加一个模块,都需要在main中添加新模块的初始化。也就是说增加的一个不能算是真正的独立模块,得在main中修改代码才能集成这模块功能。有没有什么办法可以实现main跟其他模块之间隔离呢?main不再关心有什么模块,模块的删减也不需要修改main?
二 liunx内核模块初始化
如果你对liunx模块有一定了解,你应该知道liunx模块都是独立加载,加载模块,不需要修改main代码。甚至不需要重新编译代码。...
linux编程, 内核阅读全文
2019-09-18 17:40
⁄ 工业·编程
⁄ 共 2744字
一 iptables简介
iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。 而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)
当主机收到一个数据包后,数据...
ipset, iptables, 防火墙阅读全文