我必須使用WiFi適配器將數據包發送到另一臺計算機,而無需連接到任何網絡,目標是Windows 7及更高版本。首先,臨時(根據我的理解)不符合我的需求,因爲它需要連接。發送沒有網絡連接的數據包(無線適配器)
我有兩個想法:
創建類似於其識別網絡中廣播包的東西。這可以在無線卡上使用
發送虛假但有效的數據包,而不是 需要特定的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類型。
廣播數據包只與別人(路由器)實際執行廣播工作。你不能只將數據包扔到空中,並且有東西抓住它們。爲什麼你不能有一個網絡。沒有一個這是不可能的。 – BradleyDotNET 2014-09-02 19:40:47
這就是我害怕的。這是一個比賽。據說,它應該在win7/8上工作,而無需連接到使用帶WiFi適配器的筆記本電腦的網絡。它應該像藍牙系統一樣工作,但使用無線卡。發送ieee802.11幀將是最好的,但不是在Windows上。 – 2014-09-02 19:50:54
它是一個競賽,所以規則就是規則,但看起來你基本上是在編寫ad-hoc網絡協議。如果我在工業界這樣做,我會利用已有的:)。 – BradleyDotNET 2014-09-02 19:56:32