2009-08-14 15 views
0

J'ai lu les tutoriels et ainsi, mais je ne comprends pas. Il vous permet d'envoyer des paquets, mais comment pouvez-vous dire à Winpcap où envoyer ces paquets? Y at-il un en-tête que je devrais mettre sur les paquets afin qu'il sache à quel ip/port pour le transmettre? Je veux dire. Imaginons que je veuille envoyer des données à mon MSN, comme si j'avais écrit quelque chose à quelqu'un sur ma liste. Je peux utiliser sendpacket(), mais il ne prendra en argument que le paquet/byte array, sans préciser à quel app/ip/port l'envoyer.Winpcap simple question - comment envoyer des paquets à une adresse IP/port spécifié?

Merci

Répondre

1

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

Pour prendre votre exemple, vous devez placer l'adresse IP et le port TCP du serveur MSN approprié dans le paquet. Si vous ne le faites pas, votre matériel de réseau supprimera ou mal acheminera ce paquet.

+0

Ouais, je pensais il y a environ 2 minutes que. Je crée un paquet, y ajoute les informations, puis je l'envoie. Merci quand même! –

1

Voici comment j'ai envoyé une requête ARP sur le réseau. 1. Définir les structures pour les protocoles 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 (en-tête ARP). En conséquence, si vous voulez envoyer un paquet TCP sur IP, vous aurez besoin d'une structure de données pour l'en-tête Ethernet, l'en-tête IP et l'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 ff: ff : ff: ff: ff: ff Si vous souhaitez envoyer le paquet à la machine X avec (adresse IP 192.168.0.88), définissez l'adresse de destination dans la couche ip sur cette valeur. Une fois terminé, vous devrez déclarer un tableau char * et copier toutes les structures dans le tableau char * pour créer une séquence d'octets et l'envoyer sur le réseau.

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

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