Entwickler-Ecke

Internet / Netzwerk - Domains auf Server per Delphi ermitteln


NOS1971 - Fr 29.03.13 22:24
Titel: Domains auf Server per Delphi ermitteln
Hallo zusammen,

ich würde gern feststellen welche Webseiten noch auf einem Server gehostet sind. Also wenn ich eine domain http://www.domain.de habe und die ip des servers möchte ich gern ermitteln welche webseiten dort noch sind. das alles am liebsten in delphi ....

wie kann ich das anstellen ? welchen ansatz nutze ich oder ist das garnicht möglich ?

Grüße,

Andreas


mandras - Fr 29.03.13 22:37

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Prinzipiell nicht möglich. Ein Webserver liefert standardmäßig keine Liste der auf ihm gehosteten Seiten/(Sub-)Domains.


NOS1971 - Fr 29.03.13 22:41

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Wie machen es dann Analysetools wie Seitenreport.de oder Seitwert.de ? Die können das.


mandras - Fr 29.03.13 22:48

Ich kenne diese Tool nicht.

Es ist nur ansatzweise machbar.
Stell' Dir vor Du bist Google und kennst alle gemeldeten Domains. Die werden ja mal vom Robot aufgesucht und der ermittelt zu allen ihm bekannten Domains die IP. Also kann er zu einer gegebenen IP alle Domains heraussuchen die er kennt.

Falls auf einem Server mit einer IP die Google kennt noch eine Domain liegt, die Google weder gemeldet wurde noch in Links von bekannten Domains auftaucht taucht diese Domain nicht auf, wenn man anhand der IP nach ihr sucht.


NOS1971 - Fr 29.03.13 23:32

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ok ... danke Dir ... das ist ein Ansatz ... mal schauen ob ich damit was hinbekomme :-)


UGrohne - Sa 30.03.13 19:27

Eine Variante ist ein Reverse DNS Lookup. Dabei verwendest Du die IP-Adresse des Servers, um alle PTR-Records für diese zu bekommen. Aber alle bekommst Du nie heraus, je nach Konfiguration des Netzwerks und des Servers.


NOS1971 - So 31.03.13 14:16

user profile iconUGrohne hat folgendes geschrieben Zum zitierten Posting springen:
Eine Variante ist ein Reverse DNS Lookup. Dabei verwendest Du die IP-Adresse des Servers, um alle PTR-Records für diese zu bekommen. Aber alle bekommst Du nie heraus, je nach Konfiguration des Netzwerks und des Servers.


Also ich habe das nun mal versucht .... hier mein source


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
var
 i : integer;
 ip : string;
begin
 ip := '';
 edDNSResolver.Clear;
 edDNSResolver.Lines.Add('URL ' + parseHost(edURL.Text));
 IdDNSResolver.Host := sDefaultDNSServer2;
 IdDNSResolver.WaitingTime := 5000;
 IdDNSResolver.ClearInternalQuery;
 IdDNSResolver.QueryType := [TQueryRecordTypes.qtSTAR];
 IdDNSResolver.Resolve(parseHost(edURL.Text));
 // get each record
 for i := 0 to IdDNSResolver.QueryResult.count - 1 do
  begin
   edDNSResolver.Lines.Add(GetDNSResolverDetail(IdDNSResolver.QueryResult.Items[i]));
   if (IdDNSResolver.QueryResult.Items[i] is TARecord) then
    ip := TARecord(IdDNSResolver.QueryResult.Items[i]).IPAddress;
  end;
 // check ptr
 if ip <> '' then
  begin
   IdDNSResolver.Host := sDefaultDNSServer2;
   IdDNSResolver.WaitingTime := 5000;
   IdDNSResolver.ClearInternalQuery;
   IdDNSResolver.QueryType := [TQueryRecordTypes.qtPTR];
   IdDNSResolver.Resolve(ip);
   // get each record
   for i := 0 to IdDNSResolver.QueryResult.count - 1 do
    begin
     edDNSResolver.Lines.Add(GetDNSResolverDetail(IdDNSResolver.QueryResult.Items[i]));
    end;
  end;
end;


dazu noch die getdetail routine


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
function GetDNSResolverDetail(RR: TResultRecord) : string;
begin
  if (RR is TPTRRecord) then
    Result := 'PTR = ' + TPTRRecord(RR).Name + #13 + #10;
  if (RR is TAAAARecord) then
    Result := 'Address = ' + TAAAARecord(RR).Address + #13 + #10;
  if (RR is TNAMERecord) then
    Result := 'Hostname = ' + TNameRecord(RR).HostName + #13 + #10;

  if (RR is TARecord) then
    Result := 'IP address = ' + TARecord(RR).IPAddress + #13 + #10;
  if (RR is TCNRecord) then
    Result := 'Name Server = ' + TCNRecord(RR).HostName + #13 + #10;;
  if (RR is THINFORecord) then
    Result := 'CPU =' + THINFORecord(RR).CPU + '; OS= ' + THINFORecord(RR).OS +
      #13 + #10;;
  if (RR is TMINFORecord) then
    Result := 'Responsible Email is: ' + TMINFORecord(RR)
      .ResponsiblePersonMailbox + #13 + #10;;
  if (RR is TMXRecord) then
    Result := 'Mail Server is: ' + TMXRecord(RR).ExchangeServer + #13 + #10;;
  if (RR is TNAMERecord) then
    Result := 'Name Server = ' + TNAMERecord(RR).HostName + #13 + #10;;
  if (RR is TNSRecord) then
    Result := 'Name Server = ' + TNSRecord(RR).HostName + #13 + #10;
  if (RR is TPTRRecord) then
    Result := 'PTR = ' + TPTRRecord(RR).HostName + #13 + #10;
  if (RR is TRDATARecord) then
    Result := 'IP address = ' + TRDATARecord(RR).IPAddress + #13 + #10;
  if (RR is TSOARecord) then
  begin
    Result := 'Primary Domain Server = ' + TSOARecord(RR).Primary + #13 + #10;
    Result := Result + 'ResponsiblePersion mail = ' + TSOARecord(RR)
      .ResponsiblePerson + #13 + #10;
    Result := Result + 'Serial = ' + IntToStr(TSOARecord(RR).Serial) +
      #13 + #10;
    Result := Result + 'Refresh = ' + IntToStr(TSOARecord(RR).Refresh) + ' (' +
      DecodeSecToTime(TSOARecord(RR).Refresh) + ')' + #13 + #10;
    Result := Result + 'Retry = ' + IntToStr(TSOARecord(RR).Retry) + ' (' +
      DecodeSecToTime(TSOARecord(RR).Retry) + ')' + #13 + #10;
    Result := Result + 'Expire = ' + IntToStr(TSOARecord(RR).Expire) + ' (' +
      DecodeSecToTime(TSOARecord(RR).Expire) + ')' + #13 + #10;
    Result := Result + 'default TTL = ' + IntToStr(TSOARecord(RR).MinimumTTL) +
      ' (' + DecodeSecToTime(TSOARecord(RR).MinimumTTL) + ')';
  end;
  if (RR is TTextRecord) then
    Result := TTextRecord(RR).Text.Text;
end;


als ergebnis erhalte ich aber nur das hier ... also benachbarte domains sind da nicht dabei


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
URL modellbau-portal.net
IP address = 109.237.138.26
Mail Server is: mail.modellbau-portal.net
Name Server = cns1.alfahosting.info
Name Server = cns2.alfahosting.info
Name Server = cns3.alfahosting.info
Primary Domain Server = cns1.alfahosting.info
ResponsiblePersion mail = hostmaster.alfahosting.de
Serial = 2012011402
Refresh = 28800 (8hour)
Retry = 7200 (2hour)
Expire = 604800 (7day)
default TTL = 180 (3min)
PTR = alfa3058.alfahosting-server.de


Was mache ich falsch oder bekomme ich die gewünschten daten so einfach nicht ?


glotzer - So 31.03.13 14:48

Ich kann dir aufjedenfall deine Frage beantworten was dort noch gehostet ist, allerdings habe ich leider keinen Code dazu:

Erst ein WhoIs um die IP herrauszufinden: http://whois.gwebtools.de/modellbau-portal.net -> 109.237.138.26
Dann der Reverse DNS Lookup: http://whois.gwebtools.de/109.237.138.26
->
Zitat:

internet-prepaid.com
kostenlosesdepot.net
orchidsgarden-thaimassagen.de
fahrschule-wiesenbauer.de
autoschrotthaendler.com
geschenkegigant.de
schrotthaendler-berlin.com
modellbau-portal.net
gutscheinorkan.de
wiitool4you.de


NOS1971 - So 31.03.13 15:04

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ja ... und genau das will ich mit Delphi realisieren :-)


mandras - So 31.03.13 19:45

Und da haben wir das Problem: bei modellbau-portal.net kommen sinnvolle Antworten (ich kann natürlich nicht sagen ob das alle dort gehosteten Domains sind),
bei den von mir gehosteten Servern kommt nix sinnvolles, weil die standardmäßig konfiguriert sind und dort liefert der DNS für Reverse-Anfragen nur einen Domainnamen, was für Mailversand benötigt wird.


NOS1971 - So 31.03.13 20:04

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

merkwürdig ... ich bin immer noch der überzeugung es geht ... oder sagen wir mal man kann zumindest einen teil davon ermitteln ... ich dachte ich bin der sache schon nahe aber irgendwie komme ich wirklich nicht weiter ... ob ich es mal mit einem script versuche aus dem web ?


mandras - So 31.03.13 20:21

Es kann nur funktionieren für Domains, für die ein Reverse-Eintrag vorliegt.

Zumindest bei einem Linux-System mit Apache ist dies nicht erforderlich und nicht Standard.

Schon bei google.de meldet gwebtools nicht alle Domains (zB: http://www.google.de fehlt).

Ein Hinweis warum das so ist:

Wenn Du im Browser "www.google.de" eingibst ermittelt der Browser über ein DNS Lookup die IP.
Der DNS liefert die IP von google.de (da er weiß, daß "www.google.de" das gleiche ist wie "google.de", das hat ihm aber Google gesagt).
Als nächstes schickt der Browser ein HTTP-GET mit der vollen URL an die oben gefundene IP.
Der Webserver bei Google wäre nun in der Lage zu unterscheiden ob "www.google.de" oder nur "google.de" gemeint ist, sie haben zwar die gleiche IP, aber im Request Header sagt der Browser die volle URL.

Wie man sieht, ist für eine URL überhaupt kein Reverse Eintrag erforderlich. Daher bieten es auch nicht alle.


NOS1971 - So 31.03.13 20:36

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ah ... ok ... trotz allem scheint es aber probleme mit meinem code zu geben da ich ja nicht einmal die ergebnisse bei modellbau-portal.net über meinen code bekomme die greifbar sind :-) ... muss mich wohl noch ein wenig mit dem code rumschlagen und mal schauen wie weit ich komme :-)


MDX - Mi 22.05.13 01:34

Es gibt auch noch Websiten mit mehreren IPs (Google, Facebook, Twitter, eBay, ...) (;