Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    15

    conversione protocollo ARP in RARP

    devo convertire un nodo ip con protocollo arp in un rarp; in particolare devo rilevare il mio indirizzo ip effettuando la rispettiva richiesta al server.
    il problema riscontrato è il seguente :
    a volte non mi spedisce il pacchetto, a volte lo riceve con parametri errati. vi posto il programma da me svolto ( ho semplicemente modificato il nodo ip arp) :
    codice:
    struct arp_packet{
    unsigned short htype;
    unsigned short ptype;
    unsigned char hlen;
    unsigned char plen;
    unsigned short op;
    unsigned char mac_sorg[6];
    unsigned char ip_sorg[4];
    unsigned char mac_dest[6];
    unsigned char ip_dest[4];
    };
    void crea_arp_req(unsigned char * buffer, unsigned char * mac_sorg) {
    int i;
    struct arp_packet * arp;
    arp = (struct arp_packet *) buffer;
    arp->htype= htons(1);
    arp->ptype= htons(0x8035);
    arp->hlen = 6;
    arp->plen = 4;
    arp->op = htons(3);
    copiabytes(arp->mac_sorg,mac_sorg,6);
    copiabytes(arp->ip_sorg,ip_sorg,4);
    for(i=0;i<6;i++) {
            arp->ip_sorg[i]=0;
            arp->ip_dest[i]=0;
    }
    copiabytes(arp->mac_dest, mac_sorg,6);
    }
    
    int sonouguali(char *b1, char *b2, int len){
    int i;
    for(i=0;i<len;i++)
            if(b1[i]!=b2[i])
                    return 0;
    return 1;
    }
    void trova_mac(unsigned char * mac_sorg, unsigned char *incognita_ip)
    {
    char buffer[1600];
    int tmp;
    struct ether_frame * e;
    struct arp_packet *a;
    unsigned char * eth;
    
    crea_arp_req(buffer+500,mac_sorg);
    eth=crea_eth(buffer+500,broadcast_mac,0x0806);
    
    stampa_bytes(eth,sizeof(struct ether_frame)+sizeof(struct arp_packet));
    tmp = invia_frame(eth,sizeof(struct ether_frame)+sizeof(struct arp_packet));
    if(tmp!=0){
            printf("Programma Abortito\n");
            exit(1);
            }
    e = (struct ether_frame *) buffer ;
    a = (struct arp_packet *)  (buffer + sizeof(struct ether_frame));
    while(1){
    
            tmp=ricevi_frame(buffer,1600);
            if(tmp==-1){
                    printf("Programma Abortito\n");
                    exit(1);
                    }
            if (e->type == htons(0x0800)){
                    if (a->op == htons(4)){
                            if(sonouguali(a->mac_dest,mac_sorg,6)){
                                    printf("Ricevuto:\n");
                                    stampa_bytes(buffer,tmp);
                                    copiabytes(incognita_ip,a->ip_dest,4);
                                    return ;
                                    }
                    }
            }
            }
    }
    i nomi corrispondono ancora al protocollo arp ma ho cambiato le caratteristiche per il protocollo rarp

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    15
    proprio nessuno riesce a darmi una mano????? sto impazzendo sono da due giorni dietro a sto programma

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.