OS X Scapy混杂模式

时间:2014-04-28 21:17:13

标签: python macos scapy packet-sniffers sniffing

我正在使用scapy来尝试列出我网络上发送的所有http主机标头。我目前的代码是:

#!/usr/bin/env python
import sys
sys.path.append("/usr/local/lib/python2.7/site-packages")
import re
from scapy.all import *
import os
import urllib


conf.sniff_promisc=True

HOST_REGEX = "(?<=\r\nHost\: )([A-Za-z\.]){4,40}(?=\r\n)"

def print_host_header(pckt):
  if pckt:
    raw = pckt.getlayer(Raw)
    if raw:
      raw_pckt_data = raw.load
      host_results = re.search(HOST_REGEX, raw_pckt_data)
      if host_results:
        print "[*] Request to: "+str(host_results.group(0))
if __name__ == "__main__":
  if os.getuid()!=0:
    print "[!] Not running as root."
    exit(1)
  sniff(filter='tcp', prn=print_host_header, store=0)

这非常有效(显然它无法读取使用ssl / tls加密的流量),但我似乎没有捕获任何不是来自我的笔记本电脑的数据包(这是运行的计算机)剧本)。我将conf.promisc设置为true,并根据ifconfig我处于混杂模式:

735Tesla # ifconfig en1
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether 60:c5[...]
    inet6 fe80::62c5:47ff:fe8b:3768%en1 prefixlen 64 scopeid 0x5 
    inet 192.168.1.8 netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=1<PERFORMNUD>
    media: autoselect
    status: active
735Tesla # 

还有另一个原因我无法捕获发往其他计算机的数据包吗?

我正在运行OS X 10.9.1(我真的应该更新或修补goto失败我想:P)

2 个答案:

答案 0 :(得分:2)

如果en1是以太网适配器,网络中插入的其他计算机是什么? en1是否已插入交换机?如果是,see the Wireshark Wiki page about capturing on Ethernet networks

如果en1是Wi-Fi适配器,则需要以监控模式捕获;我不知道Scapy支持打开监控模式,但您可能必须将链路层标头类型设置为带有radiotap接头的#34; 802.11#34;进入监控模式。在监控模式下,如果网络是受保护的&#34;网络(使用WEP或WPA / WPA2加密),您还必须在链路层解密数据包 - Scapy可能没有任何支持。

答案 1 :(得分:2)

以下是Wireshark对该主题的非常深入的解释:http://www.wireshark.org/faq.html#q7.1

问题7.1:当我使用Wireshark捕获数据包时,为什么我只看到进出机器的数据包,或者看不到我希望从机器上看到的所有流量我是试图监控?

答:这可能是因为您捕获的接口已插入以太网或令牌环交换机;在交换网络上,两个端口之间的单播流量不一定会出现在其他端口上 - 只有广播和多播流量才会发送到所有端口。 请注意,即使您的机器已插入集线器,也可以使用&#34; hub&#34;可能是交换式集线器,在这种情况下,您仍然在交换网络上。 另请注意,在Linksys网站上,他们说他们的自动感应集线器将10Mb数据包广播到仅以10Mb运行的端口,并将100Mb数据包广播到仅以100Mb运行的端口&#34;,这表明如果你嗅探10Mb端口,你将看不到流量被发送到100Mb端口,反之亦然。 Netgear双速集线器也出现了这个问题,并且可能存在其他的自动感应&#34;或者&#34;双速&#34;集线器。 某些交换机能够将所有端口上的所有流量复制到单个端口,以便您可以将分析仪插入该单个端口以嗅探所有流量。您必须检查交换机的文档以查看是否可行,如果可以,请查看如何执行此操作。有关某些交换机的信息,请参阅Wireshark Wiki上的交换机参考页面。 (请注意,它是一个Wiki,因此您可以更新或修复该信息,或者自行添加有关这些交换机或新交换机信息的其他信息。) 另请注意,许多防火墙/ NAT盒内置了一个开关;这包括许多&#34;有线/ DSL路由器&#34;框。如果您有一个这样的盒子,它有一个带有一些以太网端口的交换机,您可以在其中插入网络上的机器,另一个以太网端口用于连接电缆或DSL调制解调器,您至少可以嗅探流量通过将路由器上的以太网端口连接到调制解调器,调制解调器上的以太网端口以及将运行Wireshark的计算机插入集线器(请确保它&#39),在网络上的计算机和Internet之间进行连接; s不是交换集线器,如果它是双速集线器,那么这三个端口都以相同的速度运行。 如果您的计算机未插入交换网络或双速集线器,或者插入交换网络但是端口设置为将所有流量复制到其中,则问题可能是您所在的网络接口#39;重新捕捉并不支持&#34;混杂的&#34;模式,或者因为您的操作系统无法将接口置于混杂模式。通常,网络接口仅提供给主机:

  • 发送到该主机的一个链路层地址的数据包;
  • 广播包;
  • 发送到主机已配置接口接受的组播地址的组播数据包。

大多数网络接口也可以放入&#34;混杂的&#34;模式,它们向主机提供他们看到的所有网络数据包。 Wireshark将尝试将其捕获的接口置于混杂模式,除非&#34;以混杂模式捕获数据包&#34;选项在&#34;捕获选项&#34;中关闭对话框,除非指定了-p选项,否则TShark会尝试将其捕获的接口置于混杂模式。但是,某些网络接口不支持混杂模式,某些操作系统可能不允许将接口置于混杂模式。 如果界面没有以混杂模式运行,它将无法看到您的计算机无法看到任何流量。它将看到广播数据包,并将组播数据包发送到接口设置为接收的组播MAC地址。 您应该询问网络接口的供应商是否支持混杂模式。如果是这样,您应该询问为接口提供驱动程序的人员(供应商或您在计算机上运行的操作系统的供应商)是否支持具有该网络接口的混杂模式。 对于令牌环接口,其中一些驱动程序(在Windows上)可能需要您启用混杂模式才能以混杂模式捕获。有关详细信息,请参阅令牌环捕获中的Wireshark Wiki项目。 在无线局域网接口的情况下,看起来,当这些接口混杂地嗅探时,它们在与它们仅作为网络接口(作为网络接口)时运行的模式以明显不同的模式运行(至对于那些驱动程序支持混合嗅探并同时充当常规网络接口的重要努力程度,因此可能是这些接口的Windows驱动程序不支持混杂模式。