DNS Suche

    • VB.NET

    Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von BlackNetworkBit.

      Hallo liebe Comunity :),
      ich habe eine kleine Klasse zu abfrage von DNS Servern geschrieben sie benutzt die exe : nslookup die bei Windows Standard mäßig mitinstalliert ist.
      In dieser Klasse kann man Namenserver und Internet Adressen abfragen dazu habe ich noch eine Reverse_ip abfrage eingebaut :).

      NEU = Seiten einer Domain auslesen :)

      Hier ist die Klasse :

      VB.NET-Quellcode

      1. Public Class DNS_Search
      2. Public Function DNS_SEARCH(ByVal hostName As String, ByVal dns_search_options As DNS_Option) As String
      3. If dns_search_options = DNS_Option.allsits Then
      4. Dim ste As String() = DNS_SEARCH(hostName, DNS_Option.nameserver).Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
      5. Dim sits As String = String.Empty
      6. For i = 0 To ste.Length - 1
      7. Dim plaintext As String() = GetNslookup("-q=mx " & hostName & " " & ste(i)).Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
      8. For i2 = 0 To plaintext.Length - 1
      9. Dim stebad As String() = {System.Convert.ToChar(9) & "internet", System.Convert.ToChar(9) & "MX", System.Convert.ToChar(9) & "AAAA", System.Convert.ToChar(9) & "nameserver"}
      10. For i3 = 0 To stebad.Length - 1
      11. plaintext(i2) = plaintext(i2).Replace(stebad(i3), "")
      12. Next
      13. If plaintext(i2).StartsWith("Server: ") = False And plaintext(i2).StartsWith("Address: ") = False Then
      14. sits &= plaintext(i2).Split({" "}, StringSplitOptions.RemoveEmptyEntries)(0) & Environment.NewLine
      15. End If
      16. Next
      17. Next
      18. Return Sortieren(sits)
      19. End If
      20. Dim st As String = GetNslookup("-q=any " & hostName)
      21. Select Case dns_search_options
      22. Case DNS_Option.internet_address
      23. Dim internetlist As String = String.Empty
      24. Dim lines As String() = st.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
      25. For i = 0 To lines.Length - 1
      26. If lines(i).Contains("internet address = ") = True Then
      27. internetlist &= lines(i).Split({"internet address = "}, StringSplitOptions.None)(1) & Environment.NewLine
      28. End If
      29. Next
      30. If internetlist = String.Empty Then Return "no internet address(es) found"
      31. Return internetlist
      32. Case DNS_Option.nameserver
      33. Dim nameserverlist As String = String.Empty
      34. Dim lines As String() = st.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
      35. For i = 0 To lines.Length - 1
      36. If lines(i).Contains("nameserver = ") = True Then
      37. nameserverlist &= lines(i).Split({"nameserver = "}, StringSplitOptions.None)(1) & Environment.NewLine
      38. End If
      39. Next
      40. If nameserverlist = String.Empty Then Return "no nameserver(s) found"
      41. Return nameserverlist
      42. Case DNS_Option.Reverse_ip
      43. Dim IP As Net.IPAddress() = Net.Dns.GetHostEntry(hostName).AddressList
      44. Dim revers_ip As String = String.Empty
      45. If IP.Length = 0 Then Return "no revers ip address(es) found"
      46. For i = 0 To IP.Length - 1
      47. revers_ip &= IP(i).ToString & Environment.NewLine
      48. Next
      49. Return revers_ip
      50. End Select
      51. Return st
      52. End Function
      53. Public Function Sortieren(ByVal text As String) As String
      54. Dim st As String() = text.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
      55. Dim d As New List(Of String)
      56. For i = 0 To st.Length - 1
      57. Dim bool As Boolean = False
      58. For i1 = 0 To d.Count - 1
      59. If d.Item(i1) = st(i) Then
      60. bool = True
      61. Exit For
      62. End If
      63. Next
      64. If bool = False Then
      65. d.Add(st(i))
      66. End If
      67. Next
      68. Dim ste As String = ""
      69. For i = 0 To d.Count - 1
      70. ste &= d.Item(i) & Environment.NewLine
      71. Next
      72. Return ste
      73. End Function
      74. Public Function GetNslookup(ByVal parm As String) As String
      75. Dim process As New Process()
      76. Dim Startinfos As New ProcessStartInfo()
      77. Startinfos.RedirectStandardOutput = True
      78. Startinfos.Arguments = parm
      79. Startinfos.FileName = "nslookup.exe"
      80. Startinfos.UseShellExecute = False
      81. Startinfos.CreateNoWindow = True
      82. process.StartInfo = Startinfos
      83. process.Start()
      84. process.WaitForExit(1000)
      85. Dim sr As IO.StreamReader = process.StandardOutput
      86. process.Close()
      87. Dim st As String = sr.ReadToEnd
      88. sr.Close()
      89. Return st
      90. End Function
      91. Public Enum DNS_Option
      92. nameserver = 1
      93. reverse_ip = 2
      94. internet_address = 3
      95. allsits = 4
      96. End Enum
      97. End Class


      Diese Klasse könnte man so verwenden :

      VB.NET-Quellcode

      1. Public Class Form1
      2. Dim dns_s As New DNS_Search
      3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      4. MessageBox.Show(dns_s.DNS_SEARCH("vb-paradise.de", DNS_Search.DNS_Option.allsits))
      5. End Sub
      6. End Class


      Das ist dann das Feedback :

      Quellcode

      1. vb-paradise.de
      2. marcus-graefe.de


      ich hoffe ihr könnt diese Klasse irgendwann mal brauchen :)

      würde mich über Kritik und co freuen :)
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „BlackNetworkBit“ ()

      Das hier

      VB.NET-Quellcode

      1. Dim lines As String() = st.Split(CChar(vbNewLine))


      ist falsch. vbNewLine besteht aus 2 Chars, Du erhälst so nur den ersten der beiden. Mach es lieber so:

      VB.NET-Quellcode

      1. Dim lines() As String = s.Split({vbNewLine}, StringSplitOptions.None)


      Aber das hast Du ja ohnehin bei den anderen Split-Vorgängen gemacht, nur hier eben zum Verständnis, was bei CChar passiert.

      Gib die Ergebnisse nicht als einfachen String zurück, sondern als Liste, das ist eleganter. Ansonsten kannst Du noch guggn, ob Du sich wiederholende Codeblöcke vermeidest.

      EDIT: Falschen Code ausgebessert.
      Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
      Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „SpaceyX“ ()

      Warum? die Split-Funktion übernimmt doch auch ein Char-Array, sollte aufs Gleiche rauskommen.

      EDIT: Hast recht @Artentus: Ich hab Müll erzählt :)
      Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
      Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
      Bei der Version mit dem Char-Array wird an jedem Char einzeln gesplittet. Du splittest also an Cr und dann nochmal an Lf und dazwischen ist dann ein Nullstring (den bemerkst du nur nicht, weil du RemoveEmpyEntries angegeben hast).
      Ein Char-Array ist nicht gleichzusetzen mit einem String.
      Jo, hast recht.

      @BlackNetworkBit: Hör auf das, was @Artentus: gesagt hat, nimm die andere Überladung der Split-Funktion, ich lag hier falsch.
      Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
      Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
      Ich habe das von @Artentus schon übernommen :)
      würde mich über weitere Kritik freuen :)
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise
      Diese Lösung finde ich aber nicht allzutoll.
      Für jede Domainauflösung einen ganzen Prozess spawnen und seinen Output abfragen hat "etwas" viel Overhead.
      Außerdem klappt das unter anderen Systemen als dem normalen Windows Vista/7/8 wahrs. nicht mehr, weil gerade die älteren den Output etwas anders formatiert ausgeben.
      UND: Ist die Ausgabe wirklich immer englisch?

      Wie wär's hiermit?
      msdn.microsoft.com/de-de/libra…ethostentry(v=vs.85).aspx
      @Manawyrm
      Diese Lösung hatte ich auch schon in Betracht gezogen doch dann habe ich gemerkt das ich über nslookup mehr Feedback bekommen (Nameserver usw)
      daher habe ich mich dafür entschieden :)

      ich glaube nslookup ist Standard mäßig immer auf englisch eingestellt :) also müsste meine Lösung auch unter xp/win 7/win 8 Funktionieren.
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise
      Hallo liebe Comunity :) ,

      ich habe einfach mal ein bisschen weiter gearbeitet und habe jetzt noch die Funktion "allsits" einprogrammiert, diese fragt dann
      die Namenserver der Domain an und liefert alle Seiten die der Namenserver über die Domain gespeichert hat :)
      z.b wenn man nach vb-paradise.de sucht kriegt man folgendes Feedback von dem Code :

      Quellcode

      1. vb-paradise.de
      2. marcus-graefe.de


      Fehler und andere Sachen bitte direkt Posten :)
      würde mich über Feedback freuen :)
      PS DNS timeouts können vorkommen :)
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise