扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
0 引言
Linux是用户可以免费获得的面向网络的操作系统由于能够自由传播和源代码开放,越来越多的程序员热衷于Linux下的网络应用程序开发。目前,大多数内部网络都接入了Internet,对网络的安全管理非常重要。网络监听可以帮助网络管理员检查网络流量、网络协议分析和故障检测,同时其他网络用户也可以利用网络监听程序非法窃取重要数据,截取用户口令。有必要分析Linux下的数据监听技术。
1 网络监听的原理
Ethernet协议的工炸仿式是将要发送的数据包发往连接在一起的所有主机。在包头中包括有应该接收数据包的主机的正确地址,只有与数据包中目标地址一致的那台主机才能接收到信息包。但是当主机工作在监听模式下,不管数据包中的目标物理地址是什么,主机都将可以接收到。
当数字信号到达一台主机的网络接口时,正常状态下网络接口对读人数据祯进行检查。如果数据祯中携带的物理地址是自己的或者物理地址是广播地址.那么就会将数据祯交给IP层软件,对于每个到达网络接口的数据祯都要进行这个过程的.但是当主机工作在监听模式下的话,所有的数据祯都将被交给上层协议软件处理。
Linux下的网络监听技术主要有两要点:
(1)如何尽可能完整的截取网络上的数据帧因为以太网上每时每刻都可能有信息传递,且据以太网的规模不同网络上的信息量变化也很大,所以截取数据帧不仅要保证数据帧的完整,而且还要考虑到如何才能减少漏截取数据帧。
(2)对截取的数据帧的过滤分析
将截取的数据帧翻译为我们能使用的数据,监听才算成功。
2 以太网数据帧的监听和过滤分析的设计
以太网上的数据帧主要涉及TCP/IP协议,主要是针对以下几个协议的分析IP,ARP,RARP,ICMP,IGMP,其中重点在于IP和ARP协议,这两个协议是多数网络协议的基础.由于各种协议的数据帧不扣同,所以涉及各协议数据帧头格式分析,下文将一一描述。
在Linux下监听网络,应先设置网卡状态,使其处于杂混模式以便监听网络上的所有数据帧。然后选择用Linuxsocket来截取数据帧,通过设置socket()函数参数值,可以使socket截取未处理的网络数据祯.关键是函数的参数设里,有关的程序部分如下:
if((fd=socket (AF_INET. SOCK_ PACKET.htons
表示截取数据帧的层次在物理层,即不作处理;Htons(0x0003)表示截取的数据帧的类型为不确定,即接受所有的包。
总的设定就是网卡上截取所有的数据帧,这样就可以截取底层数据帧,因为返回的将是一个指向数据的指针.为了分析方便,本文设置了一个基本的数据帧头结构,程序如下:
其中,ar_hrd是硬件地址的格式:ar_pro是协议地址的格式;ar_hln是硬件地址的长度;ar_ln是协议地址的长度;ar_op是arp协议的分类:0x001是arp echo:Ox0002是arpreply。接下来的分别是源地址的物理地址、源IP地址、目标地址的物理地址、目标IP地址。
Igmphdr是IP协议的icmp协议的报头,定义其结构如下:
arphdr是arp协议的报头,定义其结构如下:
u_intl6_t_unused:
u_intI6_t mtu:
}frag:
)un:
};
Linux下的TP协议中的icmp的协议,这里主要是前两项参数,其中type是icmp协议的类型,而code则是对type类型的再分析.如:type 0x03是表示。nsearchable,这时code的不同表示了不同的unsearchable:Ox00表示网络不可寻:0x01表示主机不可寻;0x02表示协议不可寻;0x03表示端口不可寻;0x05表示源路由失败;0x06表示网络不可知;0x07表示主机不可知。
Igmphdr是IP协议的igmp协议报头,定义其结构如下:
struct igmhdr
{
_u8 type:
_u8 code:
_u816 csum;
_u832 8roup:
};
Linux下的IP协议中的igmp协议,协议中主要是前两个属性。Type表示igmp协议的信息类型;code表示routingcode.
然后,将截取的数据帧的地址赋值给定义的结构,由此可根据不同的结构分析数据,得到我们需要的信息。
3 检测网络监听的方法
网络监听是为了系统管理员管理网络,监视网络状态和数据流动而设计的。但是由于它能截获网络数据。所以也是黑客所惯用的伎俩之一。因此网络监听必须受到网络管理员的控制。
网络监听实际上是很难被发现的.因为运行监听程序的主机在进行监听的过程中只是被动的接收在以太网中传输的信息,它不会跟其它的主机交换信息,也不能修改在网络中传输的信息包。这就说明了网络监听的检测是比较麻烦的事清。
方法一:一般情况下可以通过ps-ef或者ps-aux来检测。但大多实施监听程序的人都会通过修改ps的命令来防止被ps-ef的。
方法二:当运行监听程序的时候主机响应一般会受到影响而变慢,所以可以通过响应的速率来判断是否受到监听。
方法三:如果说怀疑网内某台机器正在实施监听程序的话,可以用正确的IP地址和错误的物理地址去Ping它,这样正在运行的监听程序就会做出响应固。
这是因为正常的机器一般不接收错误的物理地址的的ping信息。但正在进行监喻J机器就可以接收,要是它的IPstack不再次反向检查的话就会响应的。不过这种方法对很多系统是没有效果的,因为它依赖于系统的IP stack。
方法四:向网上发大量不存在的物理地址的包,而监听程序往往就会将这些包进行处理,这样就会导致机器性能下降,可以通过icmp echo delay来判断和比较它。
方法五:通过搜索网内所有主机上运行的程序,这样不但是工作量大,而且还不能完全同时检查所有主机上的进程。可是管理员这样做可以确定是否有一个进程是从管理员机器上启动的。
在Linux中可以通过ps aun或p5 augx命令产生一个包括所有进程的清单:进程的属主和这些进程占用的处理器时间和内存等。
方法六:利用非广播的ARP数据包进行检侧。可以向网络内的怀疑主机发送非广播的ARP包,如果该主机响应了这个ARP请求,就可以判断它可能处于网络监听模式,这是目前比较好的检测方式。
4 监听技术在网络测试中的应用
网络监听不只是网络管理的基础,还能应用在网络测试中。现在的网络测试工具大都建立在监听基础上,对监听到得数据帧的种类和数量进行统计,从而实现网络的测试。
(1)检测广播包在网络中的负载,即检测广播包在所有有包中的比例,只要在程序中比较数据帧中目的地址的物理地址为ff:ff:ff:ff:ff:ff与总帧数的比例就可得知从而得出配置VLAN等的数据基础。
(2)检测网络中因冲突产生的损坏数据帧的数量。检测损坏的数据帧在网络数据中的比例是体现网络性能的重要参数。这种检测对于监听程序而言和第一种检测大体相同,只需把统计的数据包改成小于64个字节的数据帧。
网络测试可以通过监听程序实现,由此我们可以分析出更合适具体情况的布线方法等。
5 结束语
我国的网络正在快速发展中,和应的问题也就显现出来、网络管理及相应的应用自然愈加重要.而监听技术正是网络管理和应用的基础,其意义当然重要。随着中国网络的发展,监听系统必将大有用武之地,因此监听技术的研究已是时势的需要。本文的研究为Linnx下网络监听软件的开发提供了一些参考依据。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者