2014-04-28 64 views
0

我正在使用scapy嘗試列出在我的網絡上發送的所有http主機頭。我目前擁有的代碼是這樣的:OS X Scapy混雜模式

#!/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爲真,並根據使用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(我真的應該更新或補丁轉到失敗,我想:P)

+0

你是怎麼解決的? – Teo

回答

2

如果en1是以太網適配器,有什麼成它的插入網絡上的其他機器?是否將en1插入交換機?如果是,see the Wireshark Wiki page about capturing on Ethernet networks

如果en1是Wi-Fi適配器,則需要在監視器模式下捕獲;我不知道Scapy支持打開監視器模式,但您可能必須將鏈路層報頭類型設置爲「802.11 with radiotap headers」才能進入監視器模式。在監控模式下,如果網絡是一個「受保護的」網絡(使用WEP或WPA/WPA2加密),您還必須在鏈路層解密數據包 - Scapy可能沒有任何支持。

+0

將我的網站置於監控模式後,我看到一些來自其他計算機的流量,但不是全部。我錯過了很多數據包。但是,我認爲這可能是因爲我接近接入點之類的其他東西 – 735Tesla

+1

您是如何將其置於監控模式的? – jay

2

這裏是Wireshark的的話題非常深入的解釋:http://www.wireshark.org/faq.html#q7.1

Q 7.1:當我使用Wireshark捕獲數據包,爲什麼我只看到數據包,並從我的機器,還是沒有看到所有流量我期望看到或試圖監視的機器?

答:這可能是因爲您捕獲的接口被插入以太網或令牌環交換機;在交換網絡上,兩個端口之間的單播流量不一定會出現在其他端口上 - 只有廣播和多播流量將被髮送到所有端口。 請注意,即使您的機器插入集線器,「集線器」也可能是交換式集線器,在這種情況下,您仍處於交換網絡中。 還要注意的是,在Linksys網站上,他們說他們的自動感應集線器「將10Mb數據包廣播到僅以10Mb運行的端口,並將100Mb數據包廣播到僅以100Mb運行的端口」,這將表明如果您在10Mb端口上嗅探,則不會看到發送到100Mb端口的流量,反之亦然。 Netgear雙速集線器也報告過這個問題,並可能存在其他「自動感測」或「雙速」集線器。某些交換機能夠將所有端口上的所有流量複製到一個端口,以便您可以將分析儀插入該單一端口以嗅探所有流量。您將不得不檢查交換機的文檔以查看是否可行,如果可以,請查看如何執行此操作。有關某些交換機的信息,請參閱Wireshark Wiki上的交換機參考頁面。 (請注意,這是一個Wiki,因此您可以自行更新或修復該信息,或在這些交換機上添加其他信息或在新交換機上添加信息。) 還要注意許多防火牆/ NAT盒都內置了交換機;這包括許多「有線/ DSL路由器」盒子。如果您有一盒這樣的盒子,它具有一個交換機,其中有一些以太網端口插入網絡中的機器,另一個以太網端口用於連接電纜或DSL調制解調器,您至少可以嗅探流量通過將路由器上的以太網端口連接到調制解調器,調制解調器上的以太網端口以及將Wireshark運行到集線器的機器(確保它不是交換集線器)連接到網絡上的計算機和Internet之間,如果是雙速集線器,則所有這三個端口都以相同的速度運行。 如果您的機器未插入交換網絡或雙速集線器,或者它已插入交換網絡但端口設置爲將所有流量複製到該端口,問題可能是您捕獲的網絡接口不支持「混雜」模式,或者因爲您的操作系統無法將接口置於混雜模式通常情況下,網絡接口提供給僅主機:

  • 將數據包發送到其中一個主機的鏈路層地址;
  • 廣播包;
  • 發送到多播地址的多播數據包,主機已配置接口接受多播地址。

大多數網絡接口也可以放在「混雜」模式,在這種模式下,它們向主機提供他們看到的所有網絡數據包。除非在「捕捉選項」對話框中關閉「在混雜模式下捕獲數據包」選項,否則Wireshark將嘗試將其捕獲的界面置於混雜模式,並且TShark將嘗試將捕捉的界面放入混雜模式模式,除非指定-p選項。但是,有些網絡接口不支持混雜模式,有些操作系統可能不允許接口進入混雜模式。 如果界面沒有以混雜模式運行,它將不會看到您的機器無法看到的任何流量。它將看到廣播數據包,並將組播數據包發送到接口設置爲接收的組播MAC地址。 您應該詢問您的網絡接口的供應商是否支持混雜模式。如果是這樣,您應該詢問是否爲該接口提供驅動程序(供應商或您的計算機上運行的操作系統的供應商)是否支持使用該網絡接口的混雜模式。 對於令牌環接口,其中一些驅動程序(在Windows上)可能需要啓用混雜模式才能在混雜模式下進行捕獲。有關詳細信息,請參閱令牌環捕獲上的Wireshark Wiki項目。 在無線局域網接口的情況下,看起來,當這些接口混雜嗅探時,它們的運行方式與它們在充當網絡接口時所運行的模式顯着不同(在某種程度上這對於那些驅動程序支持混淆嗅探並同時充當常規網絡接口將是非常重要的努力),因此這些接口的Windows驅動程序可能不支持混雜模式。