# DNS Lookup



## forfaro (26. Aug 2008)

Hallo zusammen,
ich würde gerne mit Java einen DNS Lookup machen (an sich einen reversed Lookup), dazu habe ich jetzt mal als totaler Neuling in Sachen DNS gegoogelt und fand dnsjava, also habe ich mal flott die Lib geholt und das erste Beispiel unter http://www.xbill.org/dnsjava/dnsjava-current/examples.html gemacht. 
Hier der Code dazu 


```
package dnsconnector;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

import org.xbill.DNS.*;

public class Dnstest {

	
	
	public Dnstest() {
	}

	private static String testDns () {
		String teststring = "";
		try {
			InetAddress addr = Address.getByName("www.google.de");
			teststring = "Inet Address : " + addr.getHostAddress();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (Throwable e) {
			e.printStackTrace();
		}
		
		return teststring;
	}

	public static void main(String[] args) throws IOException {
		
		System.err.println("Test : " + testDns());
	}

}
```

Leider funktioniert es nicht, er bekommt immer eine UnknownHostException. Ich rufe das Ding ganz simpel als Java Applikation im Eclipse auf. Ich vermute ja mal, das er keine Verbindung kriegt oder etwas in der Art. Kann mir jemand, der Erfahrung mit sowas hat, nen Tip geben, wie ich das bauen muss, das es klappt ?

Schon mal Danke und Gruß
Forfaro


----------



## Loep (26. Aug 2008)

Copy and Paste aus deinem Post in mein Eclipse und nach dem Ausführen sagt mir die Konsole:
Test : Inet Address : 209.85.135.147

Hast du ne Firewall und Java den Zugang zum Inet entzogen?


----------



## SlaterB (26. Aug 2008)

@Loeb:
hast du denn auch die Klasse Adress, anscheinend aus org.xbill.DNS.*; 
?

andererseits sollte forfaro natürlich auch mal den 'normalen' Weg ausprobieren:
InetAddress addr = InetAddress.getByName("www.google.de");
            teststring = "Inet Address : " + addr.getHostAddress();
            System.out.println(teststring);

ganz ohne externe Library


----------



## Loep (26. Aug 2008)

Klar hab ich mir die dnsjava-2.0.6.jar geladen und daraus die Address Klasse genutzt. Genau wie forfaro halt.


----------



## forfaro (27. Aug 2008)

Schon mal danke fürs testen, sitze zwar im Firmennetzwerk, aber angeblich soll Firewall das durchlassen, muss ich noch mal Wörtchen mit den Admins reden. Aber es kann nich sein das ich noch irgendwo nen namespace oder sowas einstellen muss, oder ?

Gruß
Forfaro


----------



## forfaro (27. Aug 2008)

Oh man, blöder Fehler, hatte

InetAddress addr = Address.getByName("www.google.com");

anstatt

InetAddress addr = InetAddress.getByName("www.google.com");

geschrieben, mit dem zweiten klappts ohne Probleme 

Also danke euch und alles ist grün,

Gruß
Forfaro


----------



## forfaro (3. Sep 2008)

So jetzt gibts doch noch ein Problem, mein Script DnsConnectorMain.jar ist fertig und funzt eigentlich auch, holt mir zu gegebener IP den hostname, nur kommt folgendes Ergebnis:

[mustermann@localhost ~]$ host 10.99.99.1
1.99.99.10.in-addr.arpa domain name pointer 4917712345678.
[mustermann@localhost ~]$ java -jar DnsConnectorMain.jar 10.99.99.1
Test : 10.99.99.1
[mustermann@localhost ~]$ host 209.85.135.147
147.135.85.209.in-addr.arpa domain name pointer mu-in-f147.google.com.
[mustermann@localhost ~]$ java -jar DnsConnectorMain.jar 209.85.135.147
Test : mu-in-f147.google.com

Also beim Aufruf der Google IP läuft alles richtig, beim internen Testsystem allerdings liefert er mir nich den Hostname, sondern stumpf die IP wieder zurück (laut Admin soll das richtig eingestellt sein und korrekt laufen).

Jemand eine Idee, was da falsch laufen könnte ?

Hier noch mal der Code der DNS Connector Klasse:


```
package dnsconnector;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

import org.xbill.DNS.*;

public class DnsConnector {

	
	
	public DnsConnector() {
	}

	public static String getDnsNameByIp (String ip) {
		String dnsname = "";
		try {
//			InetAddress addr = InetAddress.getByName("www.google.com");
			InetAddress addr = InetAddress.getByName(ip);
			dnsname = addr.getHostName();
		} catch (Throwable e) {
			e.printStackTrace();
		}
		
		return dnsname;
	}

	public static void main(String[] args) throws IOException {
		if (args.length > 0 && args[0] != null) {
			// 209.85.135.147
			System.out.println("Test : " + getDnsNameByIp(args[0]));
		} else {
			System.out.println("Please give an IP as argument");
		}
	}

}
```

Schon mal danke und Gruß
vom Forfaro[/code]


----------



## tuxedo (3. Sep 2008)

Für den Fall dass du an einem Windows-PC sitzt kannst du mal folgendes ausprobieren:

START -> Ausführen -> "cmd" eingeben, OK -> "nslookup 10.99.99.1" und Eingaetaste drücken. Wenn da der korrekte Hostname rauskommt, stimmt was mit deinem Tool nicht. Kommt da auch nicht der richtige Hostname raus, darfst du deinen Admin nochmal anhauen. Dann hat er wohl was falsch gemacht oder dein System verwendet den falschen DNS.

- Alex


----------

