gurutech
21-11-2007, 15:42
Ciao,
sto scrivendo un programma che ha a che fare con la rete.
ad un certo punto mi trovo a dover visualizzare gli indirizzi IP sorgente e destinazione di un pacchetto che ho acquisito. faccio così:
[...]
struct iphdr {
unsigned char version;
unsigned char hdrlen;
unsigned char tos;
unsigned short int totlen;
unsigned char protocol;
unsigned long int srcip;
unsigned long int dstip;
} packet;
struct in_addr srcaddr;
struct in_addr dstaddr;
char saddr[16],daddr[16];
[...]
packet.srcip=0;
for (k=12;k<16;k++) {
packet.srcip <<= 8;
packet.srcip+=payload[k];
}
packet.dstip=0;
for (k=16;k<20;k++) {
packet.dstip <<= 8;
packet.dstip+=payload[k];
}
srcaddr.s_addr=htonl(packet.srcip);
memset(saddr,0,16);
snprintf(saddr,16,"%s",inet_ntoa(srcaddr));
dstaddr.s_addr=htonl(packet.dstip);
memset(daddr,0,16);
snprintf(daddr,16,"%s",inet_ntoa(dstaddr));
printf("SRC %s DST %s\n",saddr,daddr);
risultato:
SRC 191.168.0.9 DST 212.66.99.56
la destinazione e' corretta, ma la sorgente e' sbagliata (e' 192.168.0.9)
dove sbaglio?
grazie
sto scrivendo un programma che ha a che fare con la rete.
ad un certo punto mi trovo a dover visualizzare gli indirizzi IP sorgente e destinazione di un pacchetto che ho acquisito. faccio così:
[...]
struct iphdr {
unsigned char version;
unsigned char hdrlen;
unsigned char tos;
unsigned short int totlen;
unsigned char protocol;
unsigned long int srcip;
unsigned long int dstip;
} packet;
struct in_addr srcaddr;
struct in_addr dstaddr;
char saddr[16],daddr[16];
[...]
packet.srcip=0;
for (k=12;k<16;k++) {
packet.srcip <<= 8;
packet.srcip+=payload[k];
}
packet.dstip=0;
for (k=16;k<20;k++) {
packet.dstip <<= 8;
packet.dstip+=payload[k];
}
srcaddr.s_addr=htonl(packet.srcip);
memset(saddr,0,16);
snprintf(saddr,16,"%s",inet_ntoa(srcaddr));
dstaddr.s_addr=htonl(packet.dstip);
memset(daddr,0,16);
snprintf(daddr,16,"%s",inet_ntoa(dstaddr));
printf("SRC %s DST %s\n",saddr,daddr);
risultato:
SRC 191.168.0.9 DST 212.66.99.56
la destinazione e' corretta, ma la sorgente e' sbagliata (e' 192.168.0.9)
dove sbaglio?
grazie