java - getCanonicalHostName for localhost fungerer på Win 7, men ikke XP?

Indlæg af Hanne Mølgaard Plasc

Problem



Følgende enkle kode fungerer fint i Windows 7, og returnerer et fuldt kvalificeret navn (fx 'myhost.x.com'). Men når der køres på Windows XP-maskiner i samme netværk, returneres det kun værtsnavnet (fx 'myhost'). Er dette et kendt problem? Eventuelle løsninger?


hostName = InetAddress.getLocalHost().getCanonicalHostName();


Kontekst: Ønsker at matche processer fra den samme oprindelige maskine på en fjernserver. Klientprocesserne passerer i deres værtsnavn, så serveren kan gruppere anmodninger fra den samme klientmaskin, selv når de kommer fra forskellige apps på den pågældende maskine. Vi ser uoverensstemmelser for apps, der kører på klientmaskiner, der bruger XP, når en klientproces er Java, og den anden er C #, fordi den ene er fuldt kvalificeret, og den ene er ikke. Windows 7 klienter fungerer fint. Oprindeligt troede det, at .NET ikke var at få FQDN på XP, men nu ser det ud til at være Java-klienter ved hjælp af koden ovenfor.


Opdatering: På samme XP-maskine kan en C ++-klient (ikke .NET) også få det fuldt kvalificerede navn. Så det virker som om de tre, kun java på denne maskine er ude af stand til at få FQDN ved hjælp af denne API. Dette er Java 1.6.0\_20-b02. Koden i Java og C ++ skal også fungere på ikke-Windows-platforme.

Bedste reference


Dokumentationen for metoden - http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#getCanonicalHostName () - siger [2]


'Henter det fuldt kvalificerede domænenavn for denne IP-adresse. Bedste indsatsmetode, hvilket betyder, at vi muligvis ikke kan returnere FQDN afhængigt af den underliggende systemkonfiguration.'


Jeg tror, ​​at Java spørger resolveren i operativsystemet, som tilsyneladende er anderledes på 7 og XP. Alligevel kan denne anmodning nixed af SecurityManager, hvilket betyder at du måske skal genoverveje din identifikationsproces. Måske gør du selv DNS-opslaget baseret på alle de IP-numre, som maskinen har.


Hvad er de oplysninger, du har brug for, og hvorfor?