Question

Je lis les tutoriels et ainsi, mais je ne suis pas l'obtenir. Il vous envoie des paquets, ne laisse, mais comment pouvez-vous dire Winpcap où envoyer ces paquets? Y at-il la tête que je devrais mettre sur les paquets de sorte qu'il saura que son IP / port de le transmettre? Je veux dire. Imaginons que je veux envoyer des données à mon MSN, comme si je l'avais écrit quelque chose à quelqu'un sur ma liste. Je peux utiliser le sendPacket (), mais il ne prendra le tableau paquet / octet comme argument, et non specifing auquel app / ip / port pour l'envoyer.

Merci

Était-ce utile?

La solution

Vous ne dites pas Winpcap où envoyer des paquets. Vous dites de mettre un paquet sur le fil. Le commutateur de réseau envoie le paquet à la bonne destination. La pile TCP sur l'extrémité de réception envoie le paquet à la bonne application / service. De toute évidence, cela signifie que les informations de routage doit être dans le paquet lui-même.

Pour prendre votre exemple, vous avez besoin de mettre l'adresse IP et le port TCP du serveur MSN approprié dans le paquet. Si vous ne le faites pas, votre matériel réseau rejettera ou ce paquet mal acheminer.

Autres conseils

Voici comment j'ai envoyé une requête ARP sur le fil. 1. Définir des structures pour les protocoles i.e. si vous voulez envoyer des paquets ARP vous aurez besoin d'une structure qui contiendra la couche de liaison de données (en-tête Ethernet) et la couche réseau (ARP-tête). Si vous voulez en conséquence d'envoyer un paquet tcp sur IP, vous aurez besoin d'une structure de données pour l'en-tête Ethernet, en-tête IP et en-tête tcp.

  1. une fois que vous avez défini les structures, initialiser une instance de la structure avec les valeurs que vous voulez dire si vous voulez que le paquet pour aller à toutes les machines du réseau définissent la valeur MAC de destination de l'en-tête Ethernet et suivants: ff: ff: ff: ff: ff si vous voulez envoyer le paquet à la machine X avec (adresse IP 192.168.0.88) puis définissez l'adresse de destination dans la couche IP à cette valeur.

  2. Une fois terminé, vous devrez déclarer un tableau char * et copier toutes les structures au tableau char * pour créer une séquence d'octets et l'envoyer sur le fil.

// Juste pour vous montrer ce que je veux dire en définissant les structures // ne se rapportent au reste de l'extrait de code

typedef struct IP_header 
{
    u_char      VersionNInternetHeaderLength;       // Version (4 bits) + Internet header length (4 bits)
    /*u_char        version:4;
    u_char      HeaderLength:4;*/
    u_char      Type;                               // Type of service 
    u_short     TotalLength;                        // Total length 
    u_short     Identification;                     // Identification

    u_char      rsv     : 1;
    u_char      df      : 1;
    u_char      mf      : 1;

    u_char      FragmentOffset1 : 5;
    u_char      FragmentOffset2;
    //u_short       Flags_fo;                           // Flags (3 bits) + Fragment offset (13 bits)

    u_char      TimeToLive;                         // Time to live
    u_char      Protocol;                           // Next level Protocol of the encapsulated payload
    u_short     Checksum;                           // Header checksum
    IP_address  SourceAddress;                      // Source address
    IP_address  DestinationAddress;                 // Destination address
    u_int       OptionNPadding;                     // Option + Padding

    IP_header()
    {
        mf = 0;
        rsv = 0;
        df = 0;
        FragmentOffset1 = 0;
        FragmentOffset2 = 0;

        TimeToLive = 128;

        TotalLength = sizeof(IP_header);
        Identification = 0xABCD;
        Checksum = 0xABCD;
        OptionNPadding = 0;
    }
}IP_header;


Ethernet_header EthernetHeader;// = (Ethernet_header*)malloc(sizeof(Ethernet_header));
        ARP_header ARPHeader ;//= (ARP_header*)malloc(sizeof(ARP_header));

        ARPHeader.HardwareType = htons(1);
        ARPHeader.ProtocolType = htons(0x800);
        ARPHeader.OPCODE = htons(1);

        ARPHeader.HeaderLength = 6;
        ARPHeader.ProtocolLength = 4;

        ARPHeader.SenderMAC = MY_FAKE_MAC;
        ARPHeader.SenderIP = MY_IP;

        ARPHeader.TargetMAC = MAC_address();
        ARPHeader.TargetIP = Whose;

        EthernetHeader.DestinationMAC = BROADCASTMAC;
        EthernetHeader.SourceMAC = MY_FAKE_MAC;
        EthernetHeader.EtherType = htons(0x806);

        u_char* packet = (u_char*)malloc(sizeof(EthernetHeader) + sizeof(ARPHeader));

        memcpy(packet, &EthernetHeader, sizeof(EthernetHeader));
        memcpy(packet + sizeof(EthernetHeader), &ARPHeader, sizeof(ARPHeader));

        SendPacket(packet);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top