Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: indirizzi ip in java

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    indirizzi ip in java

    Salve a tutti,
    dovrei realizzare il seguente metodo in java.
    Ho due oggetti inetAddress che rappresentano due indirizzi ip.
    Devo estrarre da questi due indirizzi gli ottetti separatamente per poi paragonarli come interi.
    C'è qualche metodo java che faccia questo? Suggerimenti?
    Esempio:
    192.133.12.59
    221.102.10.98
    Dovrei paragonare 192 e 221; 133 e 102; 12 e 10; 59 e 98

    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: indirizzi ip in java

    Originariamente inviato da lio.b
    Devo estrarre da questi due indirizzi gli ottetti separatamente per poi paragonarli come interi.
    public byte[] getAddress()
    di InetAddress

    E comunque, se ti interessa solo determinare se due InetAddress sono uguali, c'è già equals() che fa proprio questo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    ok, ma così facendo ottengo un array di byte. Come faccio ad ottenere un intero per ogni ottetto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    ok, ma così facendo ottengo un array di byte. Come faccio ad ottenere un intero per ogni ottetto?
    Scusa ... ti serve proprio int??? "Paragonarli", cosa intendi? Vedere se sono uguali? Guarda che puoi usare == anche con i byte.

    Se invece intendi vedere se un ottetto è minore/uguale all'altro, allora no, visto che byte è segnato. In tal caso:
    b & 0xFF
    (b è il tuo byte) per averlo intero nel range 0-255.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Al di là del fatto che non capisco perchè i byte non ti vadano bene (ragioni implementative? Boh..), se proprio non puoi confrontare i valori come byte, ma li devi per forza confrontare come interi, convertili...

    codice:
    byte[] tuoIndirizzo = tuoInetAddress.getAddress();
    int[] sempreTuoIndirizzo = new int[tuoIndirizzo.length];
    for(int j=0; j<tuoIndirizzo.length; j++) sempreTuoIndirizzo[j] = (int) tuoIndirizzo[j];

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Allora andbin,
    hai capito bene devo vedere se ogni ottetto è maggiore o minore di un'altro per quanto riguarda ipv4, per l'ipv6 non ho idea di come fare.

    Che intendi per b & 0xff?

    per leleFT

    quando fai il ciclo for inserisci ogni byte in un array di interi... i puntini che separano gli ottetti come vengono cosiderati da java quando trasforma un inet address in un array di byte?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da lio.b
    per leleFT

    quando fai il ciclo for inserisci ogni byte in un array di interi... i puntini che separano gli ottetti come vengono cosiderati da java quando trasforma un inet address in un array di byte?
    Eh??
    Se ho un indirizzo IP "192.168.1.24" rappresentato come array di byte ho questa situazione:

    codice:
    byte[] ip = indirizzo.getAddress();   // indirizzo è l'InetAddress che rappresenta "192.168.1.24"
    
    ip[0] = 192
    ip[1] = 168
    ip[2] = 1
    ip[3] = 24
    Che c'entrano i puntini??

    Mi sa che hai dei grossi dubbi su cosa sia un indirizzo IP e cosa siano le sue rappresentazioni...

    PS: per gli IPv6 è la stessa identica cosa. Se l'InetAddress rappresenta un IPv4 otterrai un array di 4 byte, se rappresenta un IPv6 otterrai un array di 6 byte...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    ok leleFT.
    Se ho ben capito il metodo getAddress fa in modo che ogni casella dell'array contiene un byte. Se l'indirizzo è di tipo ipv4 l'array conterrà 4 caselle, se è ipv6 ne conterrà sei giusto?
    Per ricavare un intero dal byte di una casella mi basta usare il metodo intValue della classe Byte.

    Se ho ben capito posso usare il metdodo compareTo di Byte per vedere se un ottetto è maggiore di un'altro: byte[i] compareTo(byte[j]). Senza uasare ne il metodo intValue oppure il casting.
    Ho capito bene?
    Perchè allora andbin dice: Se invece intendi vedere se un ottetto è minore/uguale all'altro, allora no, visto che byte è segnato.

    Grazie mille, scusa se ho abusato della tua pazienza

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da lio.b
    ok leleFT.
    Se ho ben capito il metodo getAddress fa in modo che ogni casella dell'array contiene un byte. Se l'indirizzo è di tipo ipv4 l'array conterrà 4 caselle, se è ipv6 ne conterrà sei giusto?


    Per ricavare un intero dal byte di una casella mi basta usare il metodo intValue della classe Byte.
    Perchè complicarsi la vita... basta un cast, come ti ho fatto vedere nel mio primo post.

    Se ho ben capito posso usare il metdodo compareTo di Byte per vedere se un ottetto è maggiore di un'altro: byte[i] compareTo(byte[j]). Senza uasare ne il metodo intValue oppure il casting.
    Anche qui: perchè complicarsi la vita?
    Devo ancora capire perchè tu debba avere degli interi e non ti bastino i byte. Per il confronto tra valori primitivi (come appunto i byte, gli interi, ecc) è sufficiente l'operatore == senza scomodare le classi e i metodi compareTo()...

    Ho capito bene?
    Perchè allora andbin dice: Se invece intendi vedere se un ottetto è minore/uguale all'altro, allora no, visto che byte è segnato.

    Grazie mille, scusa se ho abusato della tua pazienza
    Se devi effettuare confronti diversi dalla semplice uguaglianza, allora converti l'array di byte in un array di interi e fai i confronti con quelli...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Allora,
    è ovvio che devo fare dei confronti diversi dall'uguaglianza e precisamente devo applicare l'operatore di < e >.
    Posso farlo direttamente con il metodo compareTo dei byte o sono obbligato a convertire i byte in interi? E perchè?

    2. qualora l'indirizzo sia ipv6 l'ottetto contiene anche valori letterali, a questo punto la conversione in interi si può fare?

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.