我必须使用 wifi 适配器将数据包发送到另一台计算机,而无需连接到任何网络,目标是 Windows 7 及更高版本。首先,ad-hoc(据我所知)不符合我的需求,因为它需要连接。
我有两个想法:
创建类似于广播数据包的东西来识别网络。这个可以用在无线网卡上
发送虚假但有效的数据包 需要特定的 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 这样的专用硬件,是否可以做到这一点?如果没有必要,我也想避免编写驱动程序。
附言: 我的 PC 中有一个 Edimax 无线 LAN 卡,我的笔记本电脑中有一个 Mediatek MT763E 802.11bgn Wifi 适配器。我在两者上都安装了相同版本的Wireshark,但我无法打开监控模式,也无法将链路层类型设置为IEEE-802.11,只能设置以太网和DOCSIS类型。
最佳答案
将您的 WiFi SSID 更改为消息:-)
或者这个:
关于c# - 在没有网络连接的情况下发送数据包(无线适配器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631060/