Frage

Ich habe die Tutorials und so, aber ich bin immer es nicht. Es ist können Sie Pakete senden, aber wie kann man Winpcap sagen, wo diese Pakete senden? Gibt es einen Kopf ich auf den Paketen setzen sollte, damit es weiß, wird die IP / Port das es zu übermitteln? Ich meine. Stellen wir uns vor Ich möchte ein paar Daten zu meinem MSN senden, als ob ich jemandem etwas auf meiner Liste geschrieben hatte. Ich kann den Sendpacket () verwenden, aber es wird das Paket / Byte-Array als Argument nur nehmen, specifing nicht auf den app / ip / port es so senden.

Danke

War es hilfreich?

Lösung

Sie nicht sagen, wo Winpcap Pakete zu senden. Sie sagen, dass es ein Paket auf dem Draht zu setzen. Der Netzwerk-Switch wird das Paket an das richtige Ziel senden. Der TCP-Stack auf dem empfangenden Ende wird das Paket an den richtigen Anwendung / Dienst senden. Offensichtlich ist dies bedeutet, dass die Routing-Informationen im Paket sein muss selbst.

Ihr Beispiel nehmen, sollten Sie die IP-Adresse und TCP-Port des entsprechenden MSN-Server in das Paket legen müssen. Wenn Sie dies nicht tun, wird Ihre Netzwerkhardware verwerfen oder dieses Paket fehlleiten.

Andere Tipps

Dies ist, wie ich eine ARP-Anfrage über das Netzwerk gesendet. 1. Definieren Sie Strukturen für die Protokolle heißt, wenn Sie wollen ARP-Pakete senden Sie eine Struktur benötigen, die die Datenverbindungsschicht (Ethernet-Header) und Netzwerk-Layer (ARP Header) enthalten wird. Entsprechend, wenn Sie ein TCP-Paket senden möchten over IP Sie eine Datenstruktur für den Ethernet-Header, IP-Header und TCP-Header müssen.

  1. , wenn Sie die Strukturen definiert, eine Instanz der Struktur mit Werten Sie also wollen initialisieren, wenn Sie das Paket an alle Maschinen gehen wollen in dem Netzwerk des Ziel-MAC-Wert der Ethernet-Header ff: ff: ff: ff: ff: ff, wenn Sie mit (IP-Adresse 192.168.0.88), um das Paket zu Maschine X senden dann die Zieladresse in der IP-Schicht auf diesen Wert.

  2. Nun können Sie eine char * Array deklarieren müssen und kopieren Sie alle Strukturen auf dem char * Array eine Byte-Sequenz zu erstellen und über den Draht senden.

// Nur um Sie zu zeigen, was ich meine Strukturen durch die Definition // nicht für den Rest der Code-Snippets beziehen

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top