Hi!
ich nutze c# und poste nun hier mal den relvanten Code:
Ok, das ist aber nur die halbe Wahrheit. Ich sehe, dass du mit IPAdress und IPEndPoint ein paar Verwaltungsstrukturen füllst. Das eigentlich interessante ist m.SendTo(), aber welcher Klasse m angehört, ist nicht zu sehen. Wenn ich raten soll, wird m ein Objekt der Klasse System.Net.Sockets.Socket sein. Da wäre interessant, wie du m instantiierst und ob irgendwelche weiteren Parameter gesetzt werden (nebst wichtigen Methodenaufrufen wie Bind und Listen), sowie welche (Art) Werte du da übergibst. SentTo() ist jedoch nur für das Senden zuständig. Was aber tust du, um die zu empfangenden Daten entgegennehmen zu können? Ist das ein weiteres Socket-Objekt? Du kannst ja auch noch was zu pk sagen, aber das scheint mir für das Verständnis erstmal weniger relevant (fürs erste jedenfalls).
Wenn ich also den Port nicht incrementiere, sendet der DNS Server die Antwort direkt an die Anwendung zurück, die ja an dem Port lauscht.
Aha, nun lauscht dein Programm also doch an einem Port. Das kann es nicht, wenn es sich nicht an ihn bindet, was nur erfolgreich ist, wenn die Kombination aus Port- und IP-Adresse frei ist.
Problematisch ist halt auch, dass die IP der anfragenden Anwendug die gleiche ist, wie die meines Sockets.
Inwiefern? Der DNS-Request geht doch an deine Anwendung, die dafür auf dem Port 53 lauschen muss. Andere Server bekommen doch davon nichts mit.
Ich würde ja den weiterzureichenden DNS-Request über die Namensauflösungsfunktion des Rechners laufen lassen. Das geht aber nicht, wenn es dasselbe System ist, auf dem das Programm läuft und dein Nachwuchs surfen will, da ja auf diesem die Systemeinstellung für DNS auf localhost zeigt und damit sämtliche Namensauflösungen an den gesendet werden, womit man sich im Kreis dreht. Wenn es zwei Rechner sind, ist es jedoch kein Problem.
Lo!