Blocking DNS in HttpUtils_NonblockingGet

Begonnen von Markus M., 12 Mai 2016, 17:07:28

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Ich braeuchte das Problem genauer bzw. nachstellbar beschrieben, da ich das Problem nicht sehe, und ich ein Fix auch testen will.

StefanStrobel

Hallo,

anbei ein Test-Modul, das versucht eine TCP-Verbindung zu öffnen und ein Diff für DevIo, damit mehr geloggt wird.
Das Testmodul würde ich so einbinden:


define DevIoTest TCPTest 192.168.70.199:99
attr DevIoTest verbose 5


Die Adresse sollte dabei nicht existieren.

Im Log erscheint bei mir dann folgendes:

2016.07.11 21:00:25 3: DevIoTest: define with destination 192.168.70.199:99
2016.07.11 21:00:25 3: Opening DevIoTest device 192.168.70.199:99
2016.07.11 21:00:25 1: Including ./log/fhem.save
...
2016.07.11 21:00:34 3: Can't connect to 192.168.70.199:99:
2016.07.11 21:00:34 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:00:34 5: DevIoTest: _ready called
...
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:33 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:34 5: DevIoTest: _ready called
2016.07.11 21:01:34 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:34 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:35 5: DevIoTest: _ready called
2016.07.11 21:01:35 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:35 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:36 5: DevIoTest: _ready called
2016.07.11 21:01:36 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:36 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIo-Debug: calling HttpUtils_Connect
2016.07.11 21:01:37 4: HttpUtils url=http://192.168.70.199:99/
2016.07.11 21:01:37 5: DevIoTest: Open callback: connect to http://192.168.70.199:99 timed out
2016.07.11 21:01:37 5: DevIoTest: Open callback: connect to http://192.168.70.199:99 timed out
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: Open callback: 192.168.70.199: Keine Route zum Zielrechner
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called
2016.07.11 21:01:37 5: DevIoTest: _ready called


Das interessante ist dabei dass ab 21:01:34 NEXT_OPEN vorbei ist und dann HttpUtils_Connect mehrfach aufgerufen wird.

Gruss
    Stefan

rudolfkoenig

Danke fuer das schoene Testprogramm. Die Anzahl der ReadyFn Aufrufe haengt von den restlichen Definitionen ab, in einer minimalen Testkonfiguration gab es nur einen doppelten Aufruf (immerhin). Liegt meiner Ansicht nach an dem zu spaet entfernten readyfnlist Eintrag, das habe ich jetzt geaendert, bitte um Feedback.

StefanStrobel

Sieht gut aus!

Gruß und Thanx
    Stefan

herrmannj

#64
Hallo Rudi,

ich habe Deine DNS Query in eigenen modulen adaptiert. Danke für die Vorlage!

Bei der Abfrage von api.geonames.org bekomme ich manchmal eine DNS Antwort wo der DNS Server in der Antwort nicht den offset aus der Frage verwendet sondern den Hostnamen in die Antwort schreibt. Beispiel:
a53881800001000600000000036170690867656f6e616d6573036f72670000010001036170690867656f6e616d6573034f52470000010001000001000004b009274fc0220001000100000100000405099836c02200010001000001000004b23f5cf2c02200010001000001000004b0096ba9c02200010001000001000004bc282113c02200010001000001000004050929d0
Hier schlägt die Prüfung in httputils (#117) auf type und class fehl - die anderen Antworten findet er dann auch nicht mehr. Der DNS antwortet nur sporadisch so.

vg
joerg


herrmannj

ungetestet:

#160/161 umbauen in
my $bhost = join("", map { pack("CA*",length($_),$_) } split(/\./, $host)) . "\0x00";
my $qry = pack("nnnnnn", 0x7072,0x0100,1,0,0,0) . $bhost . pack("nn", 1,1);


in dnsParse dann test ql +1 and 0xC0 == 0 ist eine Name, dann geht es weiter bei ql + length(bhost) sonst ql + 2.

Ergänzend könnte man zur Sicherheit noch ql +1 eq bhost testen, wobei der DNS dann irgendwas anderes antworten würde. Weiß nicht ob das vorkommen kann (CNAME wird ja eigentlich anders behandelt).

vg
joerg



rudolfkoenig

Hallo joerg,

dein Aenderungsvorschlag verwirrt mich: fuegt das 0-Byte nicht in der zweiten sondern in der ersten Zeile zu qry hinzu.
Habs nicht uebernommen.

Dein Beispiel enthaelt nicht komprimierte DNS Daten, das scheint heutzutage die Ausnahme zu sein, und wurde bisher von HttpUtils_dnsParse nicht verstanden. Eine verstaendliche Erklaerung des Formats habe ich nur hier gefunden, und danach implementiert. Nach meinen Tests scheint es zu funktionieren, sowohl mit deinen unkomprimierten Daten, wie auch mit "normalen" Antworten. Falls jemand einen DNS-Server kennt, der immer unkomprimiert antwortet, dann moege er das bitte hier melden.

Gruss,
  Rudi

herrmannj

alles gut. Die Änderung die Du eingecheckt hast sollte es tun.

vg
joerg