Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Moin, ich bins mal wieder :) Nachdem ich etwas mit HTML-Get gespielt habe wollte ich das bestehende und schön klein geratene *jeppy!!* Mailsystem etwas erweitern und die Mails aus einem anderen Betreiber Interface abfragen. Eigentlich kein Beinbruch, da man nur die Felder der empfangenen Daten und den Abfragestring etwas abändern muss. Nun bin ich allerdings auf eine Eigenart gestossen, denke aber das diese am Server des Betreibers liegt. Ich wollte mir nur mal eine zweite Meinung einholen. ############################################### Abfragelink = http://www.losebannerservice.de/interface/getpaidmails.php?id=593&uebrig=10 HTTPGet = my $buf = &HTTPGet('/interface/getpaidmails.php', "www.losebannerservice.de", 80, "id=593&uebrig=10&reloadmax=60&verguetung=10"); ############################################### Problem : Ich lande nicht auf dem Host www.losebannerservice.de sondern auf dms-text.de. Die Domain liegt auf der selben IP. Ist es eventuell möglich das HTTPGet nicht ganz konform arbeitet so das es zu diesem Fehler kommen kann ? Freu mich schon auf Antwort MFG Sonixx
Datum: 15.06.2007-06:44

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Was ist HTTPGet?
Datum: 15.06.2007-11:22

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Hi Das ist ein Perlmodul von dieser Seite das per Socket in der Lage ist wie ein User Agent Seiten aus dem Web abzurufen. MFG Sonixx
Datum: 15.06.2007-17:04

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
Bei mir wird dms-text.de ueberhaupt nicht aufgeloest, hat sich wohl um einen Tippfehler gehandelt, dms-test.de wird in die selbe IP aufgeloest. Es kann auf jeden Fall nicht an der DNS-Aufloesung gelegen haben, denn beim Domain-Lookup von 'losebannerservice.de' werden Domainserver nur nach der IP-Adresse befragt.Es kann also nicht dazu kommen dass wenn du nach der IP von 'losebannerservice.de' fragst auf einmal 'dms-test.de' als Antwort bekommst, die Antwort ist eine IP. Da ueber diese IP-Adresse mehrere Webangebote (unterschiedliche Domains) bedient werden, muss der Webserver entscheiden welche Seiten er ausliefert, das geschieht an Hand von HTTP-Header-Daten, der Client sendet die gewuenschte Domain im HTTP-Header seiner Anfrage. Das wuerde fuer deine Anfrage in etwa so aussehen
GET /interface/getpaidmails.php?id=593&uebrig=10 HTTP/1.1 Host: www.losebannerservice.de
Apache wertet das Header-Feld 'Host' aus und weisz damit dass es die Dokumente fuer die Domain 'www.losebannerservice.de' ausliefern soll. Sendet der Client nun kein Host-Kopffeld mit, dann greift der Apache auf den Default-VirtualHost zurueck, das gleiche gilt auch wenn kein entsprechender 'NameVirtualHost' fuer diese Domain existiert.Ich kann mir vorstellen dass Wartungsarbeiten am Server durchgefuehrt wurden.
Datum: 15.06.2007-15:57

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Bzw. dein HTTPGet sendet das 'Host'-Feld nicht mit, folgend eine HTTP-Get-Abfrage ohne der Angabe von 'Host', zeigt die Error-Seite. $ telnet losebannerservice.de 80 Trying 213.133.101.76... Connected to losebannerservice.de. Escape character is '^]'. GET / HTTP/1.1 HTTP/1.1 400 Bad Request Date: Fri, 15 Jun 2007 14:22:21 GMT Server: Apache/2.0.54 (Linux/SUSE) Content-Length: 307 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.0.54 (Linux/SUSE) Server at dms-test.de Port 80</address> </body></html> Connection closed by foreign host. $
Datum: 15.06.2007-16:12

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Hi :) Yupp das hab ich auch schon bemerkt .... Am interessantesten daran ist die Zeile am Ende der Fehlerseite : <address>Apache/2.0.54 (Linux/SUSE) Server at dms-test.de Port 80</address> Ich lande nicht einmal auf Losebannerservice.de Hast du einen Hack für http-Get ? Socket Scripting ist nicht mein Part :) MFG Sonixx
Datum: 15.06.2007-17:01

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
Dass 'dms-test.de' angezeigt wird liegt daran, dass der Apache beim Ausliefern der Fehlerseite den Host fuer die IP-Adresse ermittelt, der DNS-Server liefert fuer 213.133.101.67 die Domain 'dms-test.de' $ dig -x 213.133.101.76; <<>> DiG 9.3.4 <<>> -x 213.133.101.76 ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29735 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;76.101.133.213.in-addr.arpa. IN PTR ;; ANSWER SECTION: 76.101.133.213.in-addr.arpa. 86121 IN PTR dms-test.de. ;; AUTHORITY SECTION: 101.133.213.in-addr.arpa. 86121 IN NS ns2.your-server.de. 101.133.213.in-addr.arpa. 86121 IN NS ns.second-ns.de. ;; ADDITIONAL SECTION: ns2.your-server.de. 43366 IN A 213.133.106.251 ns.second-ns.de. 14532 IN A 213.133.105.2 ;; Query time: 204 msec ;; SERVER: 62.104.191.241#53(62.104.191.241) ;; WHEN: Thu Jun 14 17:55:23 2007 ;; MSG SIZE rcvd: 159 $
Ich habe kein HTTPGet, also auch kein Hack. Kannst du das Codestueck aus dem Modul / der Funktion posten dass die HTTP-Abfrage erzeugt?
Datum: 15.06.2007-17:47

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
Ich gebe einfach die Variable $buf aus. Habe ich von dem Beispiel im HTTP Get Modul übernommen. Am Modul selbst habe ich nichts geändert.Hier ein einfaches Beispiel : ################# Script###################### #!/usr/bin/perl require "./lib/user_agent.pm"; my $buf = &HTTPGet('/interface/getpaidmails.php', "www.losebannerservice.de", 80, "id=593&uebrig=10&reloadmax=60&verguetung=10"); print $buf; exit (0); ############################################## Bei dem Problem geh ich echt auf dem Zahnfleisch. Bei jeder Website die auf Servern mit unterschiedlichen Domains liegen scheitere ich an dem Problem. Auch bei Banna.de Ich lande mal wieder auf der Hauptdomain da der Apache meine Anforderung anhand des fehlenden Header Felds nicht zuordnen kann. Dabei wollte ich mal einen vernünftigen Mailer präsentieren .... perl ist in meinen Augen das einzig wahre. Ich könnte das Modul ersetzen aber ich würde gern euer Socketmodul benutzen. Alternativen nutzen mir zu viele Perl Module und in OOP kann ich nicht reingucken. Das macht mich nervös ;) MFG Sonixx
Datum: 15.06.2007-18:18

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Wie gesagt, wenn man das Verhalten aendern moechte, dann muesste man schon wissen was in HTTPGet() passiert. Ich wuerde hier aber schon empfehlen ein Standardmodul zu verwenden, wenn dir das HTTPGet-Modul nur die Daten vom Webserver zurueckliefert, dann ist LWP::Simple bzw. LWP::UserAgent genau das richtig fuer dich. use LWP::Simple qw();my $url = 'http://www.example.org/'; my $buf = LWP::Simple::get($url); die sprintf "Error on getting URL: %s\n", $url unless defined $buf;
bzw. use LWP::UserAgent qw();my $url = 'http://example.org/'; my $user_agent = LWP::UserAgent->new; my $response = $user_agent->get($url); unless($response->is_success) { die sprintf "Error on getting URL: %s (%s) \n", $url, $response->status_line; }
Datum: 15.06.2007-18:54

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Ich habe noch ein fertiges Modul das auf dieser Basis arbeitet, jedoch hatte ich auf ein Update des HTTP:Get Scripts gehofft. Immerhin wird es hier zum download angeboten und da es mit Multiuser Servern nicht kommunizieren kann, ist es irgendwie in diesem Zustand nutzlos. Immerhin laufen heutzutage nur Ausnahmedomains auf Dedicated Servern. Eine Socketlösung hätte mir besser gefallen als ein Gewurstel aus Modulen. Ich werds heut Abend mal umschreiben :) THX für alles ! MFG Sonixx
Datum: 15.06.2007-19:24

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
Sag das doch gleich dass du HTML-Get von dieser Seite hast, ich dachte es wurde dir von HPLose bereitgestellt. Ich bin mit den Angeboten von dieser Seite Abseits vom Forum nicht vertraut.>> Eine Socketlösung hätte mir besser gefallen als ein Gewurstel aus Modulen. >> >> Ich werds heut Abend mal umschreiben :) [/code] Das waere overkill, was gefaellt dir nicht an der Verwendung von den Modulen? Einfacher als LWP::Simple kannst du's nun wirklich nicht mehr haben. Nun gut, der Patch fuer HTML-Get
65a66 > Host: $hostname123a125 > Host: $hostname
Also Zeile 65 die Zeile
Host: $hostname
hinzufuegen, das selbe fuer Zeile 123, das wars.
Datum: 15.06.2007-19:40

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Hi :) Dickes Danke es läuft ! Allerdings musste ich es in Zeile 67 und 126 einfügen, sonst verstand mich der Webserver nicht :) Aber war gut zu erkennen da der Syntax des Scripts sehr sauber ist. Ohne dich hätt ich das nicht hinbekommen ! Damit hab ich auf Schlag schon 4 Paidmail Interfaces fertig :) .... und keines über 1,6 kb hehe Vieleicht sollte man das modifizierte Script mal in Perl Unity einpflegen ! Aber da ist der Admin gefragt. Vielen Dank Sonixx
Datum: 15.06.2007-21:12

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Ich wuerde dieses ''Script'' aus den Downloadbereicht entfernen, eigentlich is es ja kein Script, es stellt Funktionen bereit daher ist es viel mehr ein Modul oder eine Bibliothek (nur ohne eigenen Namensraum). Und diese Funktionalitaet die von diesen ''Modul'' geboten wird, ist schon laengst von den in den vorherigen Posts erwaehnten Modulen LWP::Simple, LWP::UserAgent geboten und die erledigen die Aufgaben noch wesentlich besser/zuverlaessiger. Einen kurzen Blick in den Quelltext von HTML-Get geworfen und schon zeigt sich der naechste Nachteil, das Script reagiert nur auf HTTP-Antworten mit einen Statuscode von 200, das heiszt es kann nicht mit Redirects (Weiterleitungen) umgehen. Dabei wird heute bei so gut wie jeder Startseite erst ein "301 Moved Permanently" ausgegeben. Es laesst auch keine Fehlerbehandlung zu, das einzige was passiert wenn ein Fehler auftritt, ist dass es undef zurueckliefert. Einen Fehlergrund oder -meldung bekommt man nicht. Dieses Stueck Code ist auch 'n Witz
sub FormatFormVars { local ($in) = @_; $in =~ s/ /%20/g; $in;}
als ob es nur Leerzeichen zu ersetzen gaebe.Es verwendet kein 'strict' und kein 'warnings'.
Datum: 15.06.2007-21:52

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| hihi, nun ja es ist schon etwas ..... interessant. Allerdings finde ich kann man damit super arbeiten. Fehlerbehandlungen sind nicht sonderlich interessant, da ich diese Aufgabe lieber selbst übernehme was allein schon deswegen sicherer ist da man den empfangenen Daten nicht ohne weiteres vertrauen kann. Die Interfaces mit den denen ich kommuniziere, bauen mehr als genug Mist, sind teilweise in meinen Augen unbrauchbar und ergeben meist fehlerhafte Datensätze. Da komm ich also schon einmal nicht rum. Strict verachte ich übrigens ..... ja ich erwarte den Aufschrei :D Allerdings liebe ich das *require* Command und strict fuscht mir meist dazwischen. Wenn man erst einmal gelernt hat damit umzugehen benötigt man strict aber auch nicht mehr. OOP kann ich nicht leiden weil es mir zu untransparent ist. In eigenem Code kann ich besser meinem eigenen System und den Verflechtungen folgen. Das ist wie ein grosses Puzzle im Kopf das man auch ohne Rechner weiter zerlegt und Schwachstellen findet die man dann später ausbessert. Ist schwer zu beschreiben. Ausserdem muss ich mich auf dieses Weise nicht mit den Fehlern anderer beschäftigen. Nun werd ich mal weiter herumspinnen und die Interfaces erweitern damit sich die Perl entfalten kann LOL Sonixx
Datum: 15.06.2007-22:57

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| >> Fehlerbehandlungen sind nicht sonderlich interessant, da ich diese Aufgabe lieber selbst übernehme Das ist es ja gerade, dass kannst du mit diesen Script/Modul nicht. Raetsel: Die Funktion HTMLGet() liefert dir einen leeren/undefinierten Rueckgabewert, was ist der Grund dafuer? >> Strict verachte ich übrigens ..... ja ich erwarte den Aufschrei :D Allerdings liebe ich das *require* Command und strict fuscht mir meist dazwischen. Wenn man erst einmal gelernt hat damit umzugehen benötigt man strict aber auch nicht mehr. Definitiv die falsche Faehrte! Es ist eher umgekehrt, so bald du der Meinung bist strict stoert, machst du was falsch. Wer korrekt in Perl programmiert sollte das aktivierte 'strict' naemlich gar nicht bemerken, wenn man keinen Fehler macht meldet sich dieses naemlich dann gar nicht! Das gleiche gilt fuer 'warnings'. Es gibt Faelle in denen man Konstrukte schreiben muss bei denen 'strict' und 'warnings' sich melden, fuer solche Zwecke kann man fuer den betreffenden Programmblock das Pragma auch deaktivieren, so lange man weisz was man tut. >> OOP kann ich nicht leiden weil es mir zu untransparent ist. In eigenem Code kann ich besser meinem eigenen System und den Verflechtungen folgen. Eigenen Code kann man immer besser nachvollziehen, dass hat aber nichts damit zu tun ob er OO oder funktional programmiert wurden ist. BTW: LWP::Simple ist kein OOP-Modul >> [ ... ] Ausserdem muss ich mich auf dieses Weise nicht mit den Fehlern anderer beschäftigen. Und genau aus diesen Grund ist dieser Thread entstanden?! Waere in deinen Script statt diesen HTML-Get ein Standardmodul wie LWP::Simple oder LWP::UserAgent verwendet wurden, haettest du die Probleme wahrscheinlich nicht gehabt. Und dann kommen wir zum naechsten Vorteil: Sollte es doch einmal ein Problem mit einen der Standardmodule geben, ist durch die weite Verbreitung und die haeufige Verwendung leicht und vor allem schnell Hilfe zu bekommen. Aber wenn du so wie du jetzt programmierst klar kommst, dann bleib dabei, will dich nicht von deinen Weg abbringen. Sorry wenn der Text teilweise etwas hart rueber kommt, aber es nervt manchmal ziemlich Programme korrigieren zu muessen, nur weil der Entwickler nicht dafuer gesorgt hat dass beim Programmieren 'strict' und 'warnings' aktiviert waren. Und, oft kommt noch hinzu dass Module verwendet wurden die Aufgaben erledigen fuer die es schon Module im CPAN gibt, die diese Aufgaben meist noch viel besser erledigen und deren Arbeitsweise und Schnittstelle bekannt sind. #!/usr/bin/perl may(reverse(@L), bless $you => Perl)
Datum: 16.06.2007-02:57

|
re: Unsaubere DNS Auflösung mit HTML-Get ?
|
Seitenanfang |
| Hi Dash Danke dür den *Arschvoll* :D Ja der Text ist hart. In gewisser Weise hast du nicht einmal Unrecht .... in gewisser Weise. Strict setzt einfach die Deklaration einer jeden Variable vorraus. Ich deklariere auch Variablen aber nur wenn ich sicher sein muss das sie leer sind. Das hat den Grund das eine in einem Subbereich deklarierte Variable global nicht verfügbar ist .... der andere Weg ist einfacher. Mit OOP beschimpfe ich eigentlich so ziemlich alles was man einbinden kann und wo man als durchschnittlicher Bürger nur Kaudawelsch versteht. Da mein Perl Guru, der mir den Kram ansatzweise beigebracht hat, anscheinend strict liebt habe ich es zu tollerieren gelernt. Sollte ich damit arbeiten müsste ich in den Main Sys alle Vars deklarieren die meine Require Subs nutzen ..... das wäre extrem aufwändig. Bei Mod_Perl würde ich mit meiner Soft wohl auch Probleme bekommen .... Das ist wohl einer der Gründe warum meine Scripte nur selten zum DL stehen. Warnigs sind ebefalls ganz brauchbar. Nur wenn man lokal entwickelt bekommt man den Ärger so schön auf der Shell präsentiert. Wenn du Lust hast können wir den Thread ja mal zur Verzeifelung treiben :) Wie würdest du Vars eines mit require zu ladenden Submoduls deklarieren ? Ich würde mich gern mal wieder weiterbilden. Ich bin nicht dumm oder Faul aber da ich meine Perl Kenntnisse recht isoliert selbst aufgebaut habe besitze ich wohl einen extremen Dialekt der von der Masse nicht so einfach verstanden wird. Gruss Sonixx
Datum: 16.06.2007-07:36

|