Domanda

Ho letto il tutorial e così, ma io non sono ottenerlo. Non consentono di inviare i pacchetti, ma come si può dire Winpcap dove inviare i pacchetti? C'è un colpo di testa devo mettere sui pacchetti in modo che sapere a quale IP / del porto di trasmetterla? Intendo. Immaginiamo Voglio inviare alcuni dati al mio MSN, come se avessi scritto qualcosa a qualcuno sulla mia lista. Posso usare il sendPacket (), ma ci vorranno solo la matrice dei pacchetti / byte come argomento, non specificando a quale app / IP / porta in modo da inviarlo.

Grazie

È stato utile?

Soluzione

Non dici Winpcap dove inviare i pacchetti. Gli si dice di mettere un pacchetto sul filo. L'interruttore di rete invierà il pacchetto alla destinazione giusta. Lo stack TCP sul lato ricevente invia il pacchetto a destra applicazione / servizio. Ovviamente questo significa le informazioni di routing deve essere nel pacchetto stesso.

Per prendere il vostro esempio, avresti bisogno di inserire l'indirizzo IP e la porta TCP del server di MSN appropriato nel pacchetto. Se non lo fai, l'hardware di rete scarterà o misroute quel pacchetto.

Altri suggerimenti

Questo è il modo ho inviato una richiesta ARP oltre il filo. 1. Definire le strutture per i protocolli cioè se si desidera inviare pacchetti ARP avrete bisogno di una struttura che conterrà il livello di collegamento dati (intestazione Ethernet) e livello di rete (ARP Header). Di conseguenza, se si desidera inviare un pacchetto TCP over IP avrete bisogno di una struttura di dati per l'intestazione intestazione Ethernet, intestazione IP e TCP.

  1. Una volta definite le strutture, inizializzare un'istanza della struttura con i valori che si desidera ad esempio se si desidera che il pacchetto di andare a tutte le macchine della rete impostano il valore MAC di destinazione dell'intestazione Ethernet a FF: FF: FF: FF: FF: FF se si desidera inviare il pacchetto a macchina di X con (indirizzo IP 192.168.0.88) quindi impostare l'indirizzo di destinazione a livello IP a quel valore.

  2. Una volta fatto avrete bisogno di dichiarare un array di caratteri * e copiare tutte le strutture per l'array char * a creare una sequenza di byte e inviarlo attraverso la rete.

// solo per mostrarvi cosa intendo per la definizione delle strutture non // riguardare il resto del frammento di codice

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top