2016-07-11 17 views
0

Ich benutze curl in php, um whois-anforderungen zu stellen. Meistens funktioniert das gut, aber der gelegentliche Whois-Server lehnt CURL-Anfragen ab, weil sie ein ungültiges Format verwenden.curl whois ohne header

Dies ist ein funktionierendes Beispiel:

curl -X "who-is.ga" whois.my.ga:43

Diese auf der anderen Seite nicht funktioniert:

curl -X "ikea.eu" whois.eu:43

Die EU whois-Server ablehnen s das Format, denn (es erscheint) alle Header in der Anforderung enthalten, das heißt:

WHOIS ikea.eu/HTTP/1.1User-Agenten: curl/7.19.7 (x86_64-RedHat-Linux -gnu) libcurl/7.19.7 NSS/3,21 Basis ECC zlib/1.2.3 libidn/1,18 libssh2/1.4.2Host: whois.eu:43Accept: /

Während die meisten whois-Server die Anfrage analysieren bis einige nehmen die gesamte Anfrage in Betracht.

Also dachte ich, um die zusätzlichen Header zu entfernen, konnte aber nur den Benutzer-Agent und Host entfernen.

curl -X "ikea.eu" --header "Host:" --header "Accept:" --user-agent "" whois.eu:43

Aber die Header "/" und "HTTP/1.1" bleiben erhalten.

% WHOIS ikea.eu/HTTP/1.1 -7:% Ungültige Muster

Irgendwelche Vorschläge, wie alle Header stumm zu schalten, nur effektiv den Inhalt von "X" zu senden oder, wie man einzeln unerwünschte Header fallen lassen?

NB: Ich benutze curl für Whois-Anfragen, weil es mir erlaubt, Proxies zu verwenden. Ich habe diesen Teil absichtlich aus den obigen Beispielen herausgelassen.

+0

Beachten Sie, dass 'whois' ein Protokoll über TCP transportiert wird, nicht HTTP. Wenn Sie also ein HTTP-Tool verwenden, um es abzufragen, wie 'curl', wird es Schwierigkeiten geben. Siehe auch https://stackoverflow.com/a/45286777/6368697 –

Antwort

1

Der erste Server, whois.eu scheint zu funktionieren, weil es aufhört zu lesen, wenn es auf Leerzeichen trifft. Die andere whois.eu liest alle Eingaben aus dem Socket und verwendet diese als Ihre Abfrage.

Am besten ist es wahrscheinlich, cURL im Telnet-Modus zu verwenden, um eine einzelne Domäne zu senden und die Antwort zu lesen. Diese

funktioniert für mich auf den meisten WHOIS-Server Ich habe versucht:

echo ikea.eu | curl telnet://whois.eu:43 

Es sollte beachtet werden, dass cURL ein Byte zu einem Zeitpunkt, zu dem Sockel in Telnet-Modus, anstatt alle Daten auf einmal schreibt. Dies kann zu Problemen bei einigen Servern führen, die nicht darauf warten, dass ein Zeilenumbruch die Eingabe beendet (z. B. whois.tucows.com:43), und stattdessen die Abfrage ausführen, sobald sie Daten abgerufen haben.

In diesen Fällen können Sie mit netcat:

echo yahoo.com | nc whois.tucows.com 43 

Es unterstützt auch Proxies:

echo yahoo.com | nc -X5 -x127.0.0.1:1080 whois.tucows.com 43 
+0

Danke für den Tipp, Netcat scheint wie der Weg zu gehen und es funktioniert wie ein Charme ohne den Proxy, aber wenn ich einen externen Proxy hinzufügen, bekomme ich: nc: Berechtigung verweigert. Irgendwelche Ideen, wie Sie das beheben können? – clund

+0

Ist es ein SOCKS-Proxy? Je nachdem, woher der Fehler "Zugriff verweigert" stammt, müssen Sie möglicherweise "sudo" versuchen. – drew010

+0

Verbindung mit netcat (kein Proxy) funktioniert gut, aber mit einem Proxy bekomme ich keine Antwort zurück. Ich habe den verbose-Schalter hinzugefügt und bekam "Connection to whois.tucows.com 43 port [tcp/nicName] erfolgreich!". Irgendeine Idee, was könnte schief gehen? – clund