Linux下的网络监听技术之二

相应的数据结构:

  struct arphdr
  {
  unsigned short int ar_hrd;
  unsigned short int ar_pro;
  unsigned char ar_hln;
  unsigned char ar_pln;
  unsigned short int ar_op;
  #if 0
  unsigned char _ar_sha[ETH_ALEN];
  unsigned char _ar_sip[4];
  unsigned char _ar_tha[ETH_ALEN];
  unsigned char _ar_tip[4];
  #end if
  };

  这是linux 的arp 协议报头,其中ar_hrd 是硬件地址的格式,ar_pro协议地址的格式,ar_hln是硬件地址的长度,ar_pln时协议地址的长度,ar_op是arp协议的分类0x001是arp echo 0x0002 是 arp reply.接下来的分别是源地址的物理地址,源ip地址,目标地址的物理地址,目标ip地址。

  Tcphdr ip协议的tcp协议报头

  以下是相应数据结构:

  struct tcphdr
  {
  u_int16_t source;
  u_int16_t dest;
  u_int32_t seq;
  u_int32_t ack_seq;
  # if _BYTE_ORDER == _LITTLE _ENDIAN
  u_int16_t resl:4;
  u_int16_t doff:4;
  u_int16_t fin:1;
  u_int16_t syn:1;
  u_int16_t rst:1;
  u_int16_t psh:1;
  u_int16_t ack:1;
  u_int16_t urg:1;
  u_int16_t res2:2;
  #elif _BYTE _ORDER == _BIG _ENDIAN
  u_int16_t doff:4;
  u_int16_t res1:4;
  u_int16_t res2:2;
  u_int16_t urg:1;
  u_int16_t ack:1;
  u_int16_t psh:1;
  u_int16_t rst:1;
  u_int16_t syn:1;
  u_int16_t fin:1;
  #else
  #error "Adjust your defines"
  #endif
  u_int16_t window;
  u_int16_t check;
  u_int16_t urg_ptr;
  };

  这是Linux 下tcp协议的一部分与ip协议相同取BIG,其中source是源端口,dest 是目的端口,seq是s序,ack_seq是a序号,其余的是tcp的连接标志其中包括6个标志:syn表示连接请求,urg 表示紧急信息,fin表示连接结束,ack表示连接应答,psh表示推栈标志,rst表示中断连接。window是表示接受数据窗口大小,check是校验码,urg ptr是紧急指针。

  Udphdr 这是udp协议报头

  struct udphdr {
  u_int16_t source;
  u_int16_t dest;
  u_int16_t len;
  u_int16_t check;
  }
  

  这是Linux下ip协议中udp协议的一部分,结构很明显 source 源端口,dest目的端口,len udp 长度,check 是校验码。

  Icmphdr 这是ip协议的icmp协议的报头

  struct icmphdr
  {
  u_int8_t type;
  u_int8_t code;
  u_int16_t checksum;
  union
  {
  struct
  {
  u_int16_t id;
  u_int16_t sequence;
  } echo;
  u_int32_t gateway;
  struct
  {
  u_int16_t_unused;
  u_int16_t mtu;
  } frag;
  } un;
  };这是linux下的ip协议中的icmp的协议,这里面主要的是前两项参数,其中type是icmp协议的类型,而code 则是对type类型的再分析。如:type 0x03 是表示unsearchable,这时code的不同表示了不同的unsearchable :0x00表示网络不可寻,0x01表示主机不可寻,0x02表示协议不可寻,0x03表示端口不可寻,0x05表示源路由失败,0x06网络不可知,0x07主机不可知。

  Igmphdr 这是ip协议的igmp协议报头

  struct igmphdr
  {
  _u8 type;
  _u8 code;
  _u16 csum;
  _u32 group;
  };

  这是Linux下的ip协议中的igmp协议,协议中主要是前面两个属性,Type表示igmp 协议的信息类型,code表示routing code. 然后,将截取的数据帧的地址赋值给定义的结构.由此可根据不同的结构分析数据,得到我们需要的信息.

  检测网络监听的方法

  网络监听在上述中已经说明了。它是为了系统管理员管理网络,监视网络状态和数据流动而设计的。但是由于它有着截获网络数据的功能所以也是黑客所惯用的伎俩之一。

  检测规则的定义

  监听是为了得到我们需要的网络信息,然而网络中的信息流量可能很大,例如一个拥有百台计算机的网络其一般监听日志是每分钟以MB计算的,从如此大量的数据中找出我们需要的信息是很不容易的,于是我再程序中添加了检测规则的定义,如此用户就可以自己定义检测的规则从大量的数据中找到需要的数据并对其进行操作。关于定义的包括了我们感兴趣的大部分数据包属性:包括了源地址,目的地址,源ip地址,目的ip地址,源端口,目的端口,协议类型,连接标志,数据包数量,时间限制等。

  如我们可定义将源物理地址为172.16.11.148且源端口为25,协议为tcp连接标志为syn的数据存入相关日志文件中,并且在检测中采取链式规则,就是我们可以定义很多的规则而数据将像过流水线一样通过各个规则的检测处理,该功能和现在大多数的入侵检测系统的规则定义相似,有了这种功能使网络监听更具针对性,可以满足不同用户的需要。

  一般检测网络监听的方法通过以下来进行:

  网络监听实际上是很难被发现的。因为运行监听程序的主机在进监听的过程中只是被动的接收在以太网中传输的信息,它不会跟其它的主机交换信息的,也不能修改在网络中传输的信息包。这就说明了网络监听的检测是比较麻烦的事情。

  一般情况下可以通过ps -ef或者ps -aux来检测。但大多实施监听程序的人都会通过修改ps的命令来防止被ps -ef的。

  上边提到过。当运行监听程序的时候主机响应一般会受到影响变的会慢,所以也就有人提出来通过响应的速率来判断是否受到监听。如果说当你怀疑网内某太机器正在实施监听程序的话,可以用正确的IP地址和错误的物理地址去ping它,这样正在运行的监听程序就会做出响应的。这是因为正常的机器一般不接收错误的物理地址的ping信息的。但正在进监听的机器就可以接收,要是它的IP stack不再次反向检查的话就会响应的。不过这种方法对很多系统是没效果的,因为它依赖于系统的IP stack。

  另一种就是向网上发大量不存在的物理地址的包,而监听程序往往就会将这些包进行处理,这样就会导致机器性能下降,你可以用icmp echo delay来判断和比较它。还可以通过搜索网内所有主机上运行的程序,但这样做其的难度可想而知,因为这样不但是大的工作量,而且还不能完全同时检查所有主机上的进程。可是如果管理员这样做也会有很大的必要性,那就是可以确定是否有一个进程是从管理员机器上启动的。  在Unix中可以通过ps –aun或ps –augx命令产生一个包括所有进程的清单:进程的属主和这些进程占用的处理器时间和内存等。这些以标准表的形式输出在STDOUT上。如果某一个进程正在运行,那么它将会列在这张清单之中。但很多黑客在运行监听程序的时候会毫不客气的把ps或其它运行中的程序修改成Trojan Horse程序,因为他完全可以做到这一点的。如果真是这样那么上述办法就不会有结果的。但这样做在一定程度上还是有所作为的。在Unix和Windows NT上很容易就能得到当前进程的清单了。

  还有一种方式,这种方式要靠足够的运气。因为往往黑客所用的监听程序大都是免费在网上得到的,他并非专业监听。所以做为管理员用来搜索监听程序也可以检测。使用Unix可以写这么一个搜索的小工具了。有个叫Ifstatus的运行在Unix下的工具,它可以识别出网络接口是否正处于调试状态下或者是在进听装下。要是网络接口运行这样的模式之下,那么很有可能正在受到监听程序的攻击。Ifstatus一般情况下不会产生任何输出的,当它检测到网络的接口处于监听模式下的时候才回输出。管理员可以将系统的cron参数设置成定期运行Ifstatus,如果有好的cron进程的话可以将它产生的输出用mail发送给正在执行cron任务的人,要实现可以在crontab目录下加****/usr/local/etc/ifstatus一行参数。这样不行的话还可以用一个脚本程序在crontab下00****/usr/local/etc/run-ifstatus。

  一般情况下监听只是对用户口令信息比较敏感一点(没有无聊的黑客去监听两台机器间的聊天信息的那是个浪费时间的事情)。所以对用户信息和口令信息进行加密是完全有必要的。防止以明文传输而被监听到。现代网络中,SSH通信协议一直都被沿用,SSH所使用的端口是22,它排除了在不安全信道上通信的信息,被监听的可能性使用到了RAS算法,在授权过程结束后,所有的传输都用IDEA技术加密。但SSH并不就是完全安全的。因此,总的说来,监听的检测属于安全防范的内容,需要非常综合的知识和技能进行分析设计。

  安全方面的考虑

  DOS 攻击的检测与预防

  我国还在网络的发展阶段,自然有网络“hacker”、“crack”出现,也正是由于是发展阶段,这些人的攻击手段一般靠一些工具,这些工具一般分为破解性和破坏性,破解性耗时长成功率低,而破坏性的工具较符合这些人的性格故受欢迎,而DOS攻击工具攻击方便,成功率高,一般是“hacker”的首选。

  所谓的DOS攻击是一种拒绝服务攻击,它并不是入侵系统,而只是让系统崩溃,或处于拒绝连接状态,DOS攻击的方法主要是发送大量假的syn包使服务器忙于应答和等待假syn的请求无法对正常的连接作出反应,或发送大量的广播包利用某系系统对一些广播包会产生回应得bug来形成广播风暴阻塞网络,消耗服务器资源达到进攻目的。现在还出现了分布式的DOS攻击工具,它通过控制多台分机同时发送到攻击包,威力巨大,同时,DOS攻击还可能是另一种供给的前奏,这就是IP欺骗攻击(该攻击可以获得ROOT权限,危险系数最高),如果出现了DOS攻击但又不阻塞网络,且攻击目标不起眼,那么这很可能就是一个IP欺或TCP截取的开始,所以DOS攻击是一种破坏力大,效果明显,且暗藏杀机的攻击。

  热而DOS攻击是较容易检测的,其攻击现象明显,攻击特征突出,通过对网络的监听不难发现,如上所述我们已经可以从网络上监听数据帧并能分析他们,于是编写一个程序使用户可以通过定义自己的规范与数据帧比较然后对符合规范的数据作出相应的反应,对于DOS攻击我们可以通过定义一个带有时间限制的规范来检测,如我们可以定义在1秒如出现100个以上的syn数据包为DOS攻击,然后定义处理方法,如MAIL,LOG,SHUTDOWN或与_blank">防火墙联动等。

  IP冒用的检测与攻击

  网络的飞速发展导致了原有的32位地址协议不能满足飞速扩充的庞大计算机群,。利益不能均分,导致了IP冒用的出现,使网络秩序产生混乱。

  在这里先解释一下ARP协议的应用。ARP协议是将IP地址转换成MAC地址的协议,是局域网数据交流的基础,一台计算机是如何将自己和某一IP地址绑定?首先,一台计算机启动,他将向局域网发送其IP的ARP询问包,这是为了防止IP冲突,如无人回答,其将发送其IP的ARP应答包,向局域网申明绑定其物理地址和ip地址,如果没有在服务器上使用固定的ip/mac表那么没有ip使用权的计算机也可以乘机绑定ip,这就是ip冒用。

  对网络监测的利用可以达到检测ip冒用的出现并对之进行攻击的目的。具体方法是将检测到的arp数据帧中的ip 和 eth 地址取出来与我们建立的对应表比较,如发现ip冒用的情况,则向其发送反向arp包使其网络中断实现攻击,该做法适用于那些无法控制路由器配置,又不想修改网关配置的网络管理。在程序中我采用的是被动式的arp查询,也就是不发arp查询包,可以说出了发攻击包外对网络没有增加另外的负担。 监听技术在网络测试中的应用

  网络监听不只是网络管理的基础,还能应用在网络测试中,现在的网络测试工具大都建立在监听基础上,对监听到的数据帧的种类和数量进行统计,从而实现网络的测试。同理可以使用本监听程序对数据分类统计达到测试网络的作用。

  例如目前较多用到的网络测试:

  1)检测广播包在网络中的负载,即检测广播包在所有包中的比例,只要在程序中比较数据帧中目的地址的物理地址为ff:ff:ff:ff:ff:ff与总帧数的比例就可得知。从而给出了配置VLAN等的数据基础。

  2)检测网络中因冲突产生的坏数据帧的数量,因为共享式以太网采取的CSMA/CD协议,每台计算机发送信号时不能保证没有有其它计算机也在发送信号,而在发现冲突后就停止发送,故会产生一些损坏的数据帧,检测损坏的数据帧在网络数据中的比例是体现网络性能的重要参数,这种检测对于监听程序而言和第一种检测大体相同,只是把统计的数据包改成冲突的数据帧,也就是数据帧大小小于64个字节的数据帧的数量,同理类是网络测试都可以通过监听程序实现,由此我们可以分析出更合适具体情况的布线方法等等。

  垃圾邮件过滤的初步实现

  垃圾邮件就是过滤到那些我们不想接受的,内容不安全的电子邮件,由于电子邮件的服务特点,使得电子邮件成为当代社会信息传递的便捷途径之一,但同时也有一些人利用这一点发送不安全的危害社会的宣传,于是垃圾邮件过滤就成为了必要,由于当前邮件服务器管理的松懈,随便一个人有台计算机有个IP就可以组建服务器,使得邮件的来源相当复杂,所以要完全过滤不容易,但我们还是可以通过网络监听来实现邮件的初步过滤.

  第一种方法:就是屏蔽某些ip的swtp连接,通过监听程序可以实现这点,如设定规则当源IP地址为****且TCP连接端口为25时就屏蔽连接。

  第二种方法:由于很多电子邮件服务器允许邮件转发(这也是必要的,我们不可能能连接到每一台机),所以通过ip地址不一定可以屏蔽这个用户的邮件他可以通过其他的服务器转发,因此在第一种方法无效的情况下我们可以通过账号来屏蔽服务,由于电子邮件服务器的统一命令要求需要用户在发邮件时申明用户例如:mail from XXX@XXX ,所以我们可以通过监听程序来发现我们不喜欢的用户并屏蔽,这要求我们对数据帧不仅分析报头,还要分析数据,将其与我们设定的字符串比较,如相同,则找到了屏蔽连接.

文章录入:aaadxmmm    责任编辑:aaadxmmm

(0)

相关推荐

  • VC++简单实现关机、重启计算机实例代码

    本文以一个实例形式介绍了VC++简单实现关机.重启计算机的方法,代码比较实用,有一定的参考价值.完整实例代码如下: void CWebBrowserView::OnMenuShutdown() { // TODO: 在此添加命令处理程序代码 if (AfxMessageBox("确定要关机吗?",MB_YESNO) == IDYES) { HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if (

  • VC MFC非模态对话框的实现方法

    众所周知的,MFC中非模态对话框在显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.本文就来给大家讲解一下非模态对话框的实现方法: 一.非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,因此,在创建模态对话框时所创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 二.创建及显示非模态对话框的步骤 需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnCli

  • VC中SDK与MFC的区别浅析

    本文浅析了vc中SDK与MFC的区别,对于初学VC的朋友有一定的学习借鉴价值,详情如下: SDK 是指Software Development Kit 软件开发包 MFC 是指Microsoft Foundation Classes 微软函数类库 因此MFC是对API函数的封装,也算是vc里的SDK   用VC编写Windows程序有两种:1. Windwos c方式(SDK),2.C++方式:即对SDK函数进行包装,如VC的MFC,BCB的OWL等. SDK编程就是直接调用Windows的AP

  • VC实现获取本机MAC地址的方法

    本文实例采用vc6.0运行环境,通过实例实现获得MAC地址的功能. 完整的实例代码如下: #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <httpext.h> #include <windef.h> #include <Nb30.h> int getMAC(char * mac) { NCB ncb; typedef struct _AS

  • VC++实现输出GIF到窗体并显示GIF动画的方法

    本文讲述了VC++在窗体中显示GIF动画的方法,这是主要代码部分,在这段代码中,VC++将使用GDI技术加载GIF图像,定义GUID数组.定义指针.初始化各成员变量.释放属性对象.释放GUID等资源等. 代码如下: //加载GIF文件 void COutputGIFDlg::OnBrowse() { CFileDialog flDlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "GIF|*.

  • VC++创建msi文件的方法

    采用VC++可以编写自己软件的安装程序.这里只是创建安装程序类型的msi文件,用orca打开是正确的文件格式,值得自己记录一下了,msi数据库里面的各种表关系复杂,不是一时半刻能研究清楚的.本文仅作一浅析,实现写一个程序附到软件程序的后面,这样可以在编译完成后直接会有安装程序msi文件.就像平常下载的软件,可以写注册表,创建桌面快捷方式,注册各种软件用到的组件和功能. 具体示例程序如下: #pragma once //CRT headers. #include <TCHAR.H> //wind

  • 基于VC实现的网络监听功能程序实例

    本文所述VC++网络监听器代码,可以实现监听网络连接所使用的协议.源IP地址.目标IP地址等信息的功能,并且能把数据内容绑定到网格控件中显示.具体功能代码部分如下所示: //线程函数 UINT ThreadFun( LPVOID pParam ) { CSniffAppDlg* pDlg = static_cast<CSniffAppDlg*>(pParam); MSG msg; char buffer[1000],sourceip[32] ,*tempbuf; char *ptemp; BY

  • Linux下的网络监听技术之一

    前言:在网络中,当信息进行传播的时候,可以利用工具,将网络接口设置在监听的模式,便可将网络中正在传播的信息截获或者捕获到,从而进行攻击.网络监听在网络中的任何一个位置模式下都可实施进行.而黑客一般都是利用网络监听来截取用户口令.比如当有人占领了一台主机之后,那么他要再想将战果扩大到这个主机所在的整个局域网话,监听往往是他们选择的捷径.很多时候我在各类安全论坛上看到一些初学的爱好者,在他们认为如果占领了某主机之后那么想进入 它的内部网应该是很简单的.其实非也,进入了某主机再想转入它的内部网络里的其

  • Linux下的网络监听技术之二

    相应的数据结构: struct arphdr { unsigned short int ar_hrd; unsigned short int ar_pro; unsigned char ar_hln; unsigned char ar_pln; unsigned short int ar_op; #if 0 unsigned char _ar_sha[ETH_ALEN]; unsigned char _ar_sip[4]; unsigned char _ar_tha[ETH_ALEN]; uns

  • Linux下修改Oracle监听地址的方法

    lisenter.ora 目录在 /opt/oracle/11g/network/admin LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.111.123)(PORT = 1521)) ) ) ADR_BASE_LISTENER = /opt/oracle tnsnames.o

  • Linux 下sudo网络权限详解

    Linux 下sudo网络权限详解 对于设置了网络代理的服务器,在当前用户下执行网络访问没有问题,但通过sudo执行命令时,就会出现"无网络连接"的错误. 背景 对于设置了网络代理的服务器,在当前用户下执行网络访问没有问题,但通过sudo执行命令时,就会出现"无网络连接"的错误. 普通权限下,wget成功. # wget https://github.com --2016-12-08 09:00:43-- https://github.com/ Connecting

  • Redis集群下过期key监听的实现代码

    1. 前言 在使用redis集群时,发现过期key始终监听不到.网上也没有现成的解决方案.于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听.以上做法可能不尽人意,目前也没找到好的解决方案,如果有好的想法,请留言告知哦!不多说,直接贴我自己的代码! 2. 代码实现 关于Redis集群配置代码此处不贴,直接贴配置监听类代码! redis.host1: 10.113.56.68 redis.port1: 7030 redis.host2: 10.113

  • 在layui框架中select下拉框监听更改事件的例子

    在select 加入红框中的代码(看不到红框的往右拖动一点) 事件监听select(这里面是上面图中红框内容   可自定义) 以上这篇在layui框架中select下拉框监听更改事件的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 解决layui下拉框监听问题(监听不到值的变化)

    关于layui监听下拉框值得变化,大家都知道官方文档给我们提供了一个方法 form.on('select(demo)',function(data){ console.log(data.value)//打印当前select选中的值 }) 按照我之前的理解,监听下拉框值得变化,就是只有下拉框的值发生了改变,才会触发这个事件,否则就不触发.但是这个方法是,只要你鼠标点击了下拉选项里面的值,不论这个值跟之前的值是否相等,都会触发这个事件. 下面说一下我的解决办法 1.首先,我写了一个input框,用来

  • Android网络监听和网络判断示例介绍

    目录 一.在AndroidMainfest.xml中添加权限 二.NetUtilSS 网络判断工具类 三.IntentReceiver网络监听工具类 四.BaseActivity 五.MainActivity    一.在AndroidMainfest.xml中添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:

  • Android App内监听截图加二维码功能代码

    Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司logo等一系列*. 项目地址 测试截图: 截屏原理 android系统并没有提供截屏通知相关的API,需要我们自己利用系统能提供的相关特性变通实现.Android系统有一个媒体数据库,每拍一张照片,或使用系统截屏截取一张图片,都会把这张图片的详细信息加入到这个媒体数据库,并发出内容改变通知,我们可

随机推荐