2014-09-02 5 views
4

Je dois envoyer des paquets avec un adaptateur wifi à un autre ordinateur sans me connecter à un réseau, en ciblant Windows 7 et supérieur. Tout d'abord, ad hoc (si je comprends bien) ne correspond pas à mes besoins car il nécessite une connexion.Envoi de paquets sans connexion réseau (adaptateur sans fil)

J'ai eu deux idées:

  1. créer quelque chose de similaire à un paquet de diffusion qui identifient les réseaux. Cela peut être utilisé sur la carte sans fil

  2. envoyer un paquet faux mais valide et qui n'a pas besoin d'une adresse IP/MAC spécifique (ils peuvent être diffusés par exemple).

Ce que j'utilise: C# avec un PC Win7 et un ordinateur portable Win7 pour tester le programme. SharpPcap pour envoyer des paquets. Wireshark pour vérifier s'ils sont arrivés.

J'ai essayé la deuxième méthode:

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); 
    } 
} 

sans se connecter au même réseau, ils sont mis au rebut (pas arriver à Wireshark). Je ne peux voir les paquets que s'ils sont sur le même réseau. Pour la première, je connais la norme IEEE 802.11, mais je ne trouve rien sur la façon d'élaborer et d'envoyer ces paquets. Est-il possible de le faire sans matériel dédié comme AirPcap? Je voudrais éviter d'écrire un pilote si ce n'est pas nécessaire. J'ai une carte LAN sans fil Edimax dans mon PC et une carte Wifi Mediatek MT763E 802.11bgn dans mon ordinateur portable. J'ai installé la même version de Wireshark sur chacun d'eux, mais je ne peux pas activer le mode moniteur et ne pouvez pas définir le type de couche liaison sur IEEE-802.11, uniquement sur les types Ethernet et DOCSIS.

+2

paquets de diffusion fonctionnent uniquement avec quelqu'un (un routeur) pour effectuer réellement la diffusion. Vous ne pouvez pas simplement jeter des paquets en l'air et avoir quelque chose les attraper. Pourquoi ne pouvez-vous pas avoir un réseau. C'est impossible sans un. – BradleyDotNET

+0

C'est ce dont j'ai peur. C'est pour un concours. Il est dit qu'il devrait fonctionner sur win7/8 sans connexion à un réseau utilisant des ordinateurs portables avec des adaptateurs wifi. Il devrait fonctionner comme un système Bluetooth mais avec des cartes sans fil. L'envoi de cadres ieee802.11 serait le meilleur, mais pas sur Windows. –

+1

C'est un concours, donc les règles sont des règles, mais il semble que vous écrivez essentiellement le protocole de mise en réseau ad-hoc. Si je faisais ça dans l'industrie, je profiterais de l'existant déjà :). – BradleyDotNET

Répondre

2

Changez votre SSID WiFi au message :-)

enter image description here

Ou ceci:

enter image description here

+0

Bonne idée, je vais essayer. C'est presque la solution parfaite. J'ai trouvé ceci aussi aujourd'hui: http://msdn.microsoft.com/en-us/library/windows/hardware/ff552615(v=vs.85).aspx mais pas sûr si cela fonctionnera. Je vais accepter cela si je ne trouve pas un moyen de configurer le mode de surveillance reniflant sur Windows avec C#. –

+0

accepté, c'est la solution la plus proche. J'implémente un protocole simple en utilisant ceci et tout ira bien. –

Questions connexes