c# - 在没有网络连接的情况下发送数据包(无线适配器)

标签 c# networking wifi wireless

我必须使用 wifi 适配器将数据包发送到另一台计算机,而无需连接到任何网络,目标是 Windows 7 及更高版本。首先,ad-hoc(据我所知)不符合我的需求,因为它需要连接。

我有两个想法:

  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 这样的专用硬件,是否可以做到这一点?如果没有必要,我也想避免编写驱动程序。

附言: 我的 PC 中有一个 Edimax 无线 LAN 卡,我的笔记本电脑中有一个 Mediatek MT763E 802.11bgn Wifi 适配器。我在两者上都安装了相同版本的Wireshark,但我无法打开监控模式,也无法将链路层类型设置为IEEE-802.11,只能设置以太网和DOCSIS类型。

最佳答案

将您的 WiFi SSID 更改为消息:-)

enter image description here

或者这个:

enter image description here

关于c# - 在没有网络连接的情况下发送数据包(无线适配器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631060/

相关文章:

javascript - 使用 Controller 中的 WebClient.DownloadString(url) 时,Ajax 调用上出现 HTTP 404

Android 模拟器跨网络联网

c++ - 在 WSADuplicateSocket 上发送多条消息时会发生什么?

android - WIFI信号强度判断距离的最佳方法

python - 使用 Python 检查 Raspberry Pi 是否连接到任何 WiFi 网络(不一定是 Internet)

c# - 任何 'quick wins' 都可以使 .NET 远程处理在一台机器上更快?

c# - 从 C# 查询 MS Access

c# - 无法正常运行函数或以后台 worker 的身份运行

Android:如何使用静态 IP 连接到接入点?

linux - 双角色 WiFi SoftAP