Pregunta

He leído los tutoriales y por eso, pero no estoy recibiendo. No deja de enviar paquetes, pero ¿cómo puede saber Winpcap dónde enviar los paquetes? ¿Hay alguna cabecera debo poner en los paquetes por lo que saber a qué IP / puerto de que transmita la verdad? Quiero decir. Imaginemos que quiero enviar algunos datos para mi MSN, como si lo hubiera escrito algo a alguien en mi lista. Puedo utilizar el sendpacket (), pero sólo a tomar el conjunto de paquetes / bytes como argumento, no especificando a qué aplicación / IP / puerto para enviarlo.

Gracias

¿Fue útil?

Solución

Nunca le cuentas Winpcap dónde enviar los paquetes. Usted le dice que poner un paquete en el alambre. El conmutador de red enviará el paquete al destino correcto. La pila TCP en el extremo receptor enviará el paquete a la aplicación / servicio adecuado. Obviamente, esto significa que la información de encaminamiento tiene que estar en el propio paquete.

Para tomar su ejemplo, que había necesidad de poner la dirección IP y el puerto TCP del servidor de MSN apropiado en el paquete. Si no lo hace, el hardware de red descartará o misroute ese paquete.

Otros consejos

Esta es la forma en que envié una solicitud ARP sobre el alambre. 1. Definir las estructuras de los protocolos es decir, si desea enviar paquetes ARP se necesita una estructura que contendrá la capa de enlace de datos (cabecera Ethernet) y la capa de red (ARP Header). De manera correspondiente, si desea enviar un paquete TCP sobre IP se necesita una estructura de datos para la cabecera cabecera Ethernet, encabezado IP y TCP.

  1. Una vez que ha definido las estructuras, inicializar una instancia de la estructura con los valores que desea es decir, si desea que el paquete a ir a todas las máquinas en la red constituida el valor MAC de destino de la cabecera Ethernet a FF: FF: FF: FF: FF: FF si desea enviar el paquete a la máquina con X (dirección IP 192.168.0.88) a continuación, la dirección de destino en la capa IP a ese valor.

  2. Una vez hecho esto se tendrá que declarar una matriz de caracteres * y copiar todas las estructuras a la char * matriz para crear una secuencia de bytes y enviarlo a través del cable.

// Sólo para mostrar lo que quiero decir mediante la definición de las estructuras no // relacionarse con el resto del fragmento de código

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top