用嗅探器探数据包时的工作原理 ?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用嗅探器探数据包时的工作原理 ?相关的知识,希望对你有一定的参考价值。

网络嗅探器,可以理解为一个安装在计算机上的窃听设备,它可以用来窃听计算机在网络上所产生的众多的信息,可以窃听计算机程序在网络上发送和接收到的数据,用来接收在网络上传输的信息。
很多计算机网络采用的是“共享媒体"。也就是说,不必中断他的通讯,并且配置特别的线路,再安装嗅探器,几乎可以在任何连接着的网络上直接窃听到同一掩码范围内的计算机网络数据。这种窃听方式为“基于混杂模式的嗅探”(promiscuous mode)。
2.1 以太网的工作原理
以太网的数据传输是基于“共享”原理的:所有的同一本地网范围内的计算机共同接收到相同的数据包。这意味着计算机直接的通讯都是透明可见的。正是因为这样的原因,以太网卡都构造了硬件的“过滤器”,这个过滤器将忽略掉一切和自己无关的网络信息。事实上是忽略掉了与自身MAC地址不符合的信息。嗅探程序正是利用了这个特点,它把网卡设置为“混杂模式”。因此,嗅探程序就能够接收到整个以太网内的网络数据信息了。
在以太网中所有的通讯都是广播的,也就是说通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都有一个唯一的硬件地址,这个硬件地址也就是网卡的MAC地址。大多数系统使用48比特的地址,这个地址用来表示
网络中的每一个设备。一般来说每一块网卡上的MAC地址都是不同的,每个网卡厂家得到一段地址,然后用这段地址分配给其生产的每个网卡一个地址。在硬件地址和IP地址间使用ARP和RARP协议进行相互转换。
在正常的情况下,一个网络接口应该只响应这样的两种数据帧:
① 与自己硬件地址相匹配的数据帧。
② 发向所有机器的广播数据帧。
2.2 网卡的工作原理
在一个实际的系统中,数据的收发是由网卡来完成的。网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的MAC地址。根据计算机上的网卡驱动程序设置的接收模式判断该不该接收。认为该接收就接收后产生中断信号通知CPU;认为不该接收就丢掉不管。所以不该接收的数据,网卡就截断了,计算机根本就不知道。CPU得到中断信号产生中断,操作系统就根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。
对于网卡一般有四种接收模式:
① 广播方式:该模式下的网卡能够接收网络中的广播信息。
② 组播方式:设置在该模式下的网卡能够接收组播数据。
③ 直接方式:在这种模式下,只有目的网卡才能接收该数据。
④ 混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的

还有一种嗅探器是工作在本地的,专门嗅探本机的流量里的特殊数据,例如影音文件等,他的工作原理是创建虚拟硬件监听网卡的数据包,然后分析数据包,找出需要嗅探的信息来
参考技术A 是这样的,网卡一般只对与自己地址相匹配的帧才进行处理,不匹配的帧则丢弃,不转到上层协议进行处理。如A要发一个数据帧给B,B收到后检查目标地址是自己的就转给上层协议处理,同时网段中所有计算机都可能收到这个帧,如的C也收到了,但是检查后不是自己的就丢了,不进行处理。而嗅探器的作用就是利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为杂乱(promiscuous)模式状态,网卡就可以把他收到的所有数据转到上层协议,不管数据的目标地址是不是自己的,这样嗅探器就可以监控网络中的所有数据流,且可将包抓下进行分析用户名啊,密码啊这此了,但是只能抓取一个物理网段内的包,就是说,你和监听的目标中间不能有路由或其他屏蔽广播包的设备。

浏览器嗅探器(转)

浏览器检测是在工作中经常用到的,如果只是简单判断当前是什么浏览器的话可以通过window.navigator.useragent这样的js来直接判断就可以了!

但是针对浏览器版本要求比较高的时候,如果只是单纯的判断浏览器的名字的话还不能解决问题,这时候就要通过其他方式来实现!现有的jquery已经废弃了$.browser的使用,所以在这里我介绍一个叫做"浏览器嗅探器"的程序来实现!

代码如下:(BrowserDetect.js)

  1. var BrowserDetect =
  2. init: function ()
  3. this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
  4. this.version = this.searchVersion(navigator.userAgent)
  5. || this.searchVersion(navigator.appVersion)
  6. || "an unknown version";
  7. this.OS = this.searchString(this.dataOS) || "an unknown OS";
  8. ,
  9. searchString: function (data)
  10. for (var i=0;i<data.length;i++)
  11. var dataString = data[i].string;
  12. var dataProp = data[i].prop;
  13. this.versionSearchString = data[i].versionSearch || data[i].identity;
  14. if (dataString)
  15. if (dataString.indexOf(data[i].subString) != -1)
  16. return data[i].identity;
  17. else if (dataProp)
  18. return data[i].identity;
  19. ,
  20. searchVersion: function (dataString)
  21. var index = dataString.indexOf(this.versionSearchString);
  22. if (index == -1) return;
  23. return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
  24. ,
  25. dataBrowser: [
  26. string: navigator.userAgent,
  27. subString: "Chrome",
  28. identity: "Chrome"
  29. ,
  30. string: navigator.userAgent,
  31. subString: "OmniWeb",
  32. versionSearch: "OmniWeb/",
  33. identity: "OmniWeb"
  34. ,
  35. string: navigator.vendor,
  36. subString: "Apple",
  37. identity: "Safari",
  38. versionSearch: "Version"
  39. ,
  40. prop: window.opera,
  41. identity: "Opera"
  42. ,
  43. string: navigator.vendor,
  44. subString: "iCab",
  45. identity: "iCab"
  46. ,
  47. string: navigator.vendor,
  48. subString: "KDE",
  49. identity: "Konqueror"
  50. ,
  51. string: navigator.userAgent,
  52. subString: "Firefox",
  53. identity: "Firefox"
  54. ,
  55. string: navigator.vendor,
  56. subString: "Camino",
  57. identity: "Camino"
  58. ,
  59. // for newer Netscapes (6+)
  60. string: navigator.userAgent,
  61. subString: "Netscape",
  62. identity: "Netscape"
  63. ,
  64. string: navigator.userAgent,
  65. subString: "MSIE",
  66. identity: "Internet Explorer",
  67. versionSearch: "MSIE"
  68. ,
  69. string: navigator.userAgent,
  70. subString: "Gecko",
  71. identity: "Mozilla",
  72. versionSearch: "rv"
  73. ,
  74. // for older Netscapes (4-)
  75. string: navigator.userAgent,
  76. subString: "Mozilla",
  77. identity: "Netscape",
  78. versionSearch: "Mozilla"
  79. ],
  80. dataOS : [
  81. string: navigator.platform,
  82. subString: "Win",
  83. identity: "Windows"
  84. ,
  85. string: navigator.platform,
  86. subString: "Mac",
  87. identity: "Mac"
  88. ,
  89. string: navigator.userAgent,
  90. subString: "iPhone",
  91. identity: "iPhone/iPod"
  92. ,
  93. string: navigator.platform,
  94. subString: "Linux",
  95. identity: "Linux"
  96. ]
  97. ;
  98. BrowserDetect.init();

使用方式如下:

技术图片

 这个js兼容非常不错!使用起来比较简单,而且功能强大! 

以上是关于用嗅探器探数据包时的工作原理 ?的主要内容,如果未能解决你的问题,请参考以下文章

Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上)

网络嗅探是啥?

网络安全:基于ARP欺骗的嗅探原理

2017-2018网络攻防第四周作业

2017-2018-2 20179207 《网络攻防技术》第四周作业

浏览器嗅探器(转)