Hi!
ich nutze, wie es üblich ist UDP für's DNS.
Da ich ja, wie gesagt das IP abhöre gibt's da nichts mit Ports.
Warum machst du das auf der Ebene und nicht mindestens eine Schicht weiter oben? Und wie machst du das, welches Programmiersprache, welche Funktionen?
Ich gucke mir das UDP Paket welches in meinem IP-Paket gekapselt ist an und schaue mir die Portnummern (Source & Dest) an. IP's entnehme ich dem IP Header. So kann ich eine Zuordnung machen. Dann manipuliere ich die Pakete entsprechend und setze sie wiederum auf IP ab.
Du hast bei UDP keine andere Chance, belegte Ports festzustellen, als ihn selbst zu binden zu versuchen. Ein Test-Paket hinsenden ist nicht, weil da nichts zurückkommt, wenn nicht gerade die lauschende Anwendung aus welchen Gründen auch immer eine Antwort schickt, was sie nicht muss. Sie muss auch nicht zwingend wissen, wohin sie antworten müsste, weil bei UDP der Quellport im Prinzip irrelevant ist und auf 0 gesetzt werden kann. Bestimmte Protokolle können das vielleicht anderes handhaben, aber UDP ist nunmal eine Einwegveranstaltung und da ist theoretisch der Absenderport nicht relevant.
Du könntest mit netstat auf der Kommandozeile eine Liste der belegten Ports abfragen. Da gibts sicher auch ein programmatisches Pendant dazu. Doch diese Liste ist eine Momentaufnahme und eigentlich unbrauchbar für deinen Fall, weil zwischen Abfragen und Antwort jemand anderes sich den Port geschnappt haben kann. Die einzige Chance ist, sich auf den Port zu binden zu versuchen und dann auch dort zu bleiben, bis die Kommunikation beendet ist.
Wenn du aber auf der IP-Ebene hantierst, was interessiert dich dann, ob ein Port belegt ist? Du fängst doch das Paket ab, wenn es deins ist und gibt es nicht weiter.
Lo!