我必须将带有wifi适配器的数据包发送到另一台计算机而不连接任何网络,目标是Windows 7及更高版本。首先,ad-hoc(据我所知)不符合我的需求,因为它需要连接。
我有两个想法:
创建类似于识别网络的广播包的内容。这可以在无线网卡上使用
发送虚假但有效的数据包,但不发送 需要一个特定的IP / MAC地址(例如,它们可以广播)。
我使用的是:带有Win7 PC的C#和用于测试程序的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: 我的PC上有一块Edimax无线LAN卡,笔记本电脑上有一块Mediatek MT763E 802.11bgn Wifi-Adapter。我在两者上都安装了相同版本的Wireshark,但我无法打开监控模式,也无法将链路层类型设置为IEEE-802.11,只能设置为以太网和DOCSIS类型。
答案 0 :(得分:3)
将您的WiFi SSID更改为以下消息: - )
或者这个: