2014-09-02 31 views
4

我必須使用WiFi適配器將數據包發送到另一臺計算機,而無需連接到任何網絡,目標是Windows 7及更高版本。首先,臨時(根據我的理解)不符合我的需求,因爲它需要連接。發送沒有網絡連接的數據包(無線適配器)

我有兩個想法:

  1. 創建類似於其識別網絡中廣播包的東西。這可以在無線卡上使用

  2. 發送虛假但有效的數據包,而不是 需要特定的IP/MAC地址(例如,它們可以廣播)。

我用什麼:C#與Win7 PC和Win7筆記本電腦測試程序。 SharpPcap發送數據包。 Wireshark檢查它們是否到達。

我嘗試第二種方法:

static void Main(string[] args) 
{ 
    WinPcapDeviceList devs = WinPcapDeviceList.Instance; 
    foreach (WinPcapDevice wdev in devs) 
    { 
     System.Console.Write("Device: "); 
     System.Console.WriteLine(wdev.Description); 
     foreach (var addr in wdev.Addresses) 
      System.Console.WriteLine(addr.Addr); 
     System.Console.WriteLine("--------------"); 
    } 

    System.Console.Write("Select device: #"); 
    int selected = int.Parse(System.Console.ReadLine()); 
    var dev = devs[selected]; //yes, no checking for oob... 
    dev.Open(); 

    while (true) 
    { 
     byte[] physBroad = new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; 
     EthernetPacket etherPacket = new EthernetPacket(
      dev.MacAddress, 
      new PhysicalAddress(physBroad), 
      EthernetPacketType.IpV4); 

     IPv4Packet ip4Packet = new IPv4Packet(
      new IPAddress(0), 
      IPAddress.Broadcast); 

     ip4Packet.Protocol = IPProtocolType.UDP; 

     etherPacket.PayloadPacket = ip4Packet; 

     UdpPacket udpPacket = new UdpPacket(
      80, //tried with different port setups 
      80); 

     udpPacket.PayloadData = Encoding.UTF8.GetBytes("test packet"); 
     ip4Packet.PayloadPacket = udpPacket; 

     dev.SendPacket(etherPacket); 
    } 
} 

在不連接到它們被丟棄相同的網絡(在Wireshark的未到達)。我只能看到數據包,如果他們在同一個網絡上。

對於第一個,我瞭解IEEE 802.11,但我找不到有關如何製作和發送這些數據包的任何信息。沒有像AirPcap這樣的專用硬件可以做到這一點嗎?如果沒有必要,我想避免寫一個驅動程序。

ps: 我在我的電腦中安裝了Edimax無線局域網卡,在我的筆記本電腦中安裝了Mediatek MT763E 802.11bgn Wifi適配器。我在兩者上都安裝了相同版本的Wireshark,但我無法打開監視器模式,並且無法將鏈路層類型設置爲IEEE-802.11,僅限於以太網和DOCSIS類型。

+2

廣播數據包只與別人(路由器)實際執行廣播工作。你不能只將數據包扔到空中,並且有東西抓住它們。爲什麼你不能有一個網絡。沒有一個這是不可能的。 – BradleyDotNET 2014-09-02 19:40:47

+0

這就是我害怕的。這是一個比賽。據說,它應該在win7/8上工作,而無需連接到使用帶WiFi適配器的筆記本電腦的網絡。它應該像藍牙系統一樣工作,但使用無線卡。發送ieee802.11幀將是最好的,但不是在Windows上。 – 2014-09-02 19:50:54

+1

它是一個競賽,所以規則就是規則,但看起來你基本上是在編寫ad-hoc網絡協議。如果我在工業界這樣做,我會利用已有的:)。 – BradleyDotNET 2014-09-02 19:56:32

回答

2

你的無線SSID更改爲消息:-)

enter image description here

或者這樣:

enter image description here

+0

好主意,我會試試看。這幾乎是完美的解決方案。我今天也發現了這個:http://msdn.microsoft.com/en-us/library/windows/hardware/ff552615(v=vs.85).aspx,但不知道它是否會工作。如果我找不到用C#在Windows上設置監視模式嗅探的方法,我會接受此方法。 – 2014-09-03 11:32:35

+0

已被接受,它是最接近的解決方案。我使用這個實現了一個簡單的協議,它會很好。 – 2014-09-04 13:39:45

相關問題