|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
[socket programming] conversione indirizzi di rete
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ì: Codice:
[...] 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); 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
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
payload deve essere un array di unsigned char.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
grazie!
in effetti era una cavolata. io mi ero attenuto alle specifiche della funzione nfq_get_payload Codice:
int nfq_get_payload(struct nfq_data *nfad, char **data)
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Che stai facendo, un plugin per netfilter?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
A proposito, la struct in_addr è già in network order, te la cavi più velocemente così:
memcpy(&srcaddr.s_addr, payload+12, sizeof(srcaddr.s_addr)); memcpy(&dstaddr.s_addr, payload+16, sizeof(srcaddr.s_addr));
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
un URL filter trasparente utilizzando il target NFQUEUE
due schede di rete senza indirizzo ip in bridge tra loro, regola di iptables su br0 con target NFQUEUE. il firewall va attaccato in serie al cavo di rete che va sul computer (o sul router). sto smontando i pacchetti che passano sino a riconoscere l'url (ormai ci sono ...)
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Ovvero? Sniffi le richieste dns e le filtri in base al contenuto?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
Quote:
mettendolo in mezzo al cavo di rete tutto quello che viene trasmesso può essere acquisito.Devo interpretare la URL richiesta ed emettere un verdetto con nfq_set_verdict a seconda di cosa e' stato richiesto. per il momento e' più un esperimento che altro. poi vedremo.
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:04.