2010-11-25 9 views
1
printf(" Src Address\n"); 
for(i = 0;i < 4;i++) 
    printf(" %d ",((ip->ip_src.s_addr)&(0x0FF<<(i*8)))>>(i*8)); 

dies zeigt o/p wie 127.0.0.0, wie ich bin mit Loopback, aber wenn ich das gleiche 2-Display-Ethernet-Adresse das gleiche tunauf Konsole Anzeigen

for(i = 0;i <6; i++) 
    printf("dest ether:%c",((ethernet->ether_dhost)&(0x0FF<<(i*8)))>>(i*8)); 

der Fehler i Fehler angezeigt werden: ungültige Operanden zu binär &

hier u_char ether_dhost [6]; Die

Antwort

3

Das Feld s_addr ist eine 32-Bit-Ganzzahl, die eine IPv4-Adresse speichert. Die Variable, die IP-Adresse speichern ist vom Typ unsigned long int .... Mit dem binären &-Operator funktioniert das gut. Das ether_dhost-Feld, OTOH, ist ein 6-Byte-Array und Sie können es nicht wie Sie bearbeiten s_addr. Aber dann wieder, müssen Sie nicht auf:

for(i = 0; i < 6; i++) 
    printf(":%c"+!i, ethernet->ether_dhost[i]); 

übrigens Ihre IP-Adresse Code viel komplizierter ist, als es sein muss:

for(i = 0; i < 32; i += 8) 
    printf(".%d"+!i, (ip->ip_src.s_addr>>i)&0xff); 
+3

Dieser '+! I' Trick ist * sehr * clever. – caf

0

Wenn Sie die Standard struct inet_addr verwenden und struct ether_addr, es gibt Standardfunktionen dafür.