Простой DNS-сервер
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Public Class DNS
Private Shared client As UdpClient = New UdpClient(53)
Private Shared rP As IPEndPoint = New IPEndPoint(New IPAddress(0), 0)
Private Shared th As Thread = New Thread(New ThreadStart(AddressOf WaitF))
Public Shared Sub Start()
th.Start()
End Sub
Public Shared Sub [Stop]()
th.Abort()
End Sub
Private Shared Sub WaitF()
While True
On Error Resume Next
Dim d() As Byte = client.Receive(rP)
Dim data(d.Length - 12 - 6) As Byte
Dim tmp As Integer = 0
Dim tmp1 As Integer = 0
For i As Integer = 12 To d.Length - 6
tmp = d(i)
If tmp = 0 Then Exit For
For j As Integer = 0 To tmp
data(j + tmp1) = d(j + i + 1)
Next
data(tmp + tmp1) = Asc(".")
tmp1 = tmp1 + tmp + 1
i = i + tmp
Next
Dim Answer(d.Length - 1) As Byte
Array.Copy(d, Answer, d.Length)
Answer(2) = 133
Answer(3) = 128
Answer(4) = 0
Answer(5) = 0 'zero question
Answer(6) = 0
Answer(7) = 1 'one answer
ReDim Preserve Answer(Answer.Length + 4) 'Add 5 Zeroes (some flags)
ReDim Preserve Answer(Answer.Length + 4) 'Answer: length(1)+ ip(4)
Answer(d.Length + 5) = 4
Dim normal As String = Encoding.ASCII.GetString(data).Substring(0, data.Length - 1)
'Get DNS record
Dim path() As String = normal.Split(".")
Dim dir As String = ""
For i As Integer = path.Length - 1 To 1 Step -1
dir = dir & path(i) & "\"
Next
dir = "db\" & dir & path(0) & ".dns"
Dim inHost() As Byte = New Byte() {0, 0, 0, 0}
If File.Exists(dir) Then
Dim sr As StreamReader = New StreamReader(File.OpenRead(dir), True)
Dim tIP As String = sr.ReadLine
sr.Close()
inHost = New Byte() {Val(tIP.Split(".")(0)), Val(tIP.Split(".")(1)), Val(tIP.Split(".")(2)), Val(tIP.Split(".")(3))}
Else
Dim q As String = Resolver.Ping(normal)
If q <> "" Then
Directory.CreateDirectory(dir.Substring(0, dir.IndexOf(path(0) & ".dns") - 1))
Dim sw As StreamWriter = New StreamWriter(File.OpenWrite(dir))
sw.WriteLine(q)
sw.Close()
End If
End If
'end GET DNS record
For i As Integer = 0 To inHost.Length - 1
Answer(d.Length + 6 + i) = inHost(i)
Next
Dim h As String = rP.ToString.Substring(0, rP.ToString.IndexOf(":"))
Dim p As Integer = CInt(rP.ToString.Substring(rP.ToString.IndexOf(":") + 1))
client.Send(Answer, Answer.Length, h, p)
If inHost(0) = 0 Then Console.ForegroundColor = ConsoleColor.Red Else Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine(normal & ":" & Val(inHost(0)) & "." & Val(inHost(1)) & "." & Val(inHost(2)) & "." & Val(inHost(3)))
End While
End Sub
End Class
Комментарии:
Нету комментариев для вывода...