[UDP mit BNetEx] DeNIC-Domainabfrage per IRIS DCHK
Übersicht

![]() |
JustusBetreff: [UDP mit BNetEx] DeNIC-Domainabfrage per IRIS DCHK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
Ich habe ein Problem. Worum geht es? Ich möchte über BlitzMax eine DCHK-Abfrage starten. Das ist ein relativ neuer Dienst, der bisher nur von der DeNIC, der Vergabestelle für .de-Domains, angeboten wird. Er dient dazu abzufragen, ob eine Domain bereits registriert oder noch frei ist. Dabei ist mir wichtig, dass es mit BlitzMax selbst umgesetzt wird. Ich könnte natürlich den bereits existierenden C-Code von http://dchk.pfp.de/ benutzen, aber das ist nicht das Ziel. Wie sollte es theoretisch funktionieren? Die Abfrage basiert auf einem bestimmten Protokoll, das ist definiert in RFC 4993. Das läuft über UDP ab und hat dadurch den Vorteil, dass man den TCP-Header spart, einfach seinen Request zur DeNIC schickt und wartet bis was zurückkommt. Hat aber den Nachteil, dass man nicht weiß ob der Request überhaupt angekommen ist. Das XML, in dem steht um welche Domain es bei der Abfrage geht usw. gehört zum IRIS-Protokoll, das wiederum ist definiert im RFC 3981. Das Basis-Protokoll Zuerst wird der Payload-Descriptor gesendet, quasi Zusatzinformationen zur Payload ("Traglast", also das XML). Dieser ist im Einzelnen:
Danach wird das XML geschickt. Alles muss in genau einem UDP-Paket geschickt werden und darf nicht länger als 4000 Byte sein. Standardport ist 715. Mein Code BlitzMax: SuperStrict Mein Problem Der Request müsste eigentlich so richtig sein und er verbindet sich auch erfolgreich, aber es kommt einfach keine Antwort und ich weiß nicht, warum nicht. Habe ich in den RFCs etwas falsch gelesen oder schicke ich es einfach falsch oder antwortet er und ich empfange es nicht richtig? Vielen Dank für eure Hilfe! |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es kann eventuell sein, dass dein Router den Port blockiert?
Portforwarding hilft ![]() Generell kann es sein, dass Teile des UDP-Paketes verloren gehen, wenn dieses zu groß wird. Allerdings passiert sowas generell sehr selten. Das UDP-"Paket" kann aus mehreren Ethernet- oder IP-"Paketen" bestehen. Eventuell kommen diese immer in der falschen Reihenfolge an, so dass die Nachricht verfälscht wird und dadurch zerstört wird. Diese 2 Punkte sind aber so unwahrscheinlich, dass ich den Fehler bei der Weiterleitung deines Routers suchen würde ![]() Ob dein Code jetzt 100% richtig ist kann ich nicht beurteilen. Dafür fehlen mir die BMax Kenntnisse ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für deine Antwort, Tankbuster, aber am Portforwarding liegt es leider nicht, habe es mit gezieltem Forwarding eingeschaltet getestet.
Generell (Tip von DarkCorner) braucht man das aber ohnehin meistens nicht extra einzurichten, weil er Pakete von IPs an die man gerade etwas geschickt hat, automatisch durchwinkt. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hier verwirrt mich:
Zitat: request :+ %00000000
request :+ %1010101010101010 Ich weiß ja nicht ob es in BMax möglich ist, sowas zu machen. request ist ja als String deklariert, kann man dann einfach 1 oder 2 Bytes reinquetschen? In Blitz3D funktioniert das nicht: Code: Local lol$=""
lol$=lol$+%10000000 Print lol$ Ergebnis: 128 |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist das nicht so wie es funktionieren soll? Bei mir kommt das entsprechende raus:
Zitat: 043690400013dchk.denic.de<request xmlns="urn:ietf:params:xml:ns:iris1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:iris1 iris.xsd"><searchSet><lookupEntity registryType="urn:ietf:params:xml:ns:dchk1" entityClass="domain-name" entityName="denic.de" /></searchSet></request>
Ob ich das jetzt als String behandle oder nicht ist doch egal, oder? Nur die Darstellung bei mir ist anders, die Bytes die ankommen aber dieselben, dachte ich. Nicht? |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ha, das ist der Fehler.
Die Bytes sind nämlich nicht gleich. Dein "request :+ %1010101010101010" wird z.B. zu dem String "43690" Du siehst was.. bin(1010101010101010)=dez(43690) Also wird einfach nur die Binärzahl dezimal in den String geschrieben. Das kann nicht richtig sein. Hier liegt der Fehler ![]() Um das zu umgehen könntest du es so machen: Code: ' "request :+ %1010101010101010" wird zu: stream.WriteByte(10101010) stream.WriteByte(10101010) MFG: Tank |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
oder auch möglich is
request :+ chr(%10101010)+chr(%10101010) |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leider erreiche ich mit beiden Varianten kein funktionierendes Resultat, wenn ich den Code nach euren Vorgaben modifiziere. Kriegt ihr ein funktionierendes Beispiel hin? | ||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn dein Code stimmen sollte, müsste es so funktionieren.
Allerdings nur, wenn der Server auch sowas wie WriteLine erwartet. Es kann ja auch sein, dass er erst die Länge des Strings in einem Integer erwartet, danach den String, so wie in BB bei ReadString ![]() Oder er sucht nach nullterminierten Strings, was deiner nicht ist, da er mit einem Zeilenumbruch endet, und dann wird er einfach als unkomplett bewertet und nicht bearbeitet ![]() Dazu müsste man sich aber die docs anschaun, und ich bin etwas lesefaul. Besonders wenn es so englisch-technisches Zeug betrifft. BlitzMax:
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group