Ich habe einen virtuellen Host auf meinem Webserver, dessen einziges und einzigartiges Ziel darin besteht, die IP-Adresse des Clients zurückzugeben:
petrus@bzn:~$ cat /home/vhosts/domain.org/index.php
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Dies hilft mir bei der Behebung von Netzwerkproblemen, insbesondere wenn NAT beteiligt ist. Daher habe ich nicht immer eine Domänennamenauflösung und dieser Dienst muss auch dann funktionieren, wenn er über seine IP-Adresse abgefragt wird.
Ich verwende es folgendermaßen:
petrus@hive:~$ echo "GET /" | nc 88.191.133.41 80
191.51.4.55
petrus@hive:~$ echo "GET /" | nc ydct.org 80
191.51.4.55
router#more http://88.191.133.41/index.php
88.191.124.254
Ich habe jedoch festgestellt, dass es zumindest von einem Computer aus nicht funktionierte:
petrus@seth:~$ echo "GET /" | nc ydct.org 80
petrus@seth:~$
petrus@seth:~$ echo "GET /" | nc 88.191.133.41 80
petrus@seth:~$
Was ich überprüft habe:
Dies hat nichts mit IPv6 zu tun:
petrus@seth:~$ echo "GET /" | nc -4 ydct.org 80
petrus@seth:~$
petrus@hive:~$ echo "GET /" | nc ydct.org 80
2a01:e35:ee8c:180:21c:77ff:fe30:9e36
netcat
Version ist dieselbe (außer Plattform, i386 vs. x64):
petrus@seth:~$ type nc
nc est haché (/bin/nc)
petrus@seth:~$ file /bin/nc
/bin/nc: symbolic link to `/etc/alternatives/nc'
petrus@seth:~$ ls -l /etc/alternatives/nc
lrwxrwxrwx 1 root root 15 2010-06-26 14:01 /etc/alternatives/nc -> /bin/nc.openbsd
petrus@hive:~$ type nc
nc est haché (/bin/nc)
petrus@hive:~$ file /bin/nc
/bin/nc: symbolic link to `/etc/alternatives/nc'
petrus@hive:~$ ls -l /etc/alternatives/nc
lrwxrwxrwx 1 root root 15 2011-05-26 01:23 /etc/alternatives/nc -> /bin/nc.openbsd
Es funktioniert bei Verwendung ohne das Rohr:
petrus@seth:~$ nc ydct.org 80
GET /
2a01:e35:ee8c:180:221:85ff:fe96:e485
Und die Weiterleitung funktioniert zumindest mit einem Testdienst (der netcat
auf 1234/TCP lauscht und auf stdout ausgibt).
petrus@bzn:~$ nc -l -p 1234
GET /
petrus@bzn:~$
petrus@seth:~$ echo "GET /" | nc ydct.org 1234
petrus@seth:~$
netcat
Ich weiß nicht, ob dieses Problem eher mit oder zusammenhängt Apache
, aber ich würde mich über alle Hinweise zur Fehlerbehebung freuen!
bzn
ist der Server,hive
ist ein funktionierender Client undseth
ist der Client, bei dem ich das Problem habe.
Bearbeiten: Es funktioniert auch mit, erlaubt telnet
aber telnet
kein Piping.
2. Bearbeitung als Antwort auf MickeyB:
Tatsächlich werden Host-Header nicht übertragen, aber wie hive
oben bei Host zu sehen ist, habe ich den default
Vhost von Apache so konfiguriert, dass er sich wie ydct.org
Vhost verhält:
petrus@bzn:/etc/apache2/sites-available$ cat default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName 88.191.133.41
ServerAlias 2a01:e1b:1:132:1a0a:a9ff:fec8:f0a9
DocumentRoot /home/vhosts/ydct.org/
</VirtualHost>
Es funktioniert jedoch mit curl
!
petrus@seth:~$ curl ydct.org
2a01:e35:ee8c:180:221:85ff:fe96:e485
Ausgabe von apache2 -S
Gepostet anhttp://pastebin.com/aSf446Jv
Mich würde aber interessieren, warum das mit netcat
... nicht klappt.
Antwort1
Kurz gesagt, es ist die Version von Netcat, die Sie ausführen.
Ich habe die Befehlszeichenfolge auf meinen Maschinen wie folgt getestet:
Mac OS X Lion:
yvaine:sqlite user$ echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168
FreeBSD:
[root@freebsd82 /usr/ports]# echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168
CentOS:
[root@kvm0001 ~]# echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168
Debian (Version 6)
root@debian:~# echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168
Erst als ich zu Ubuntu „Lucid“ gewechselt bin (was Sie anscheinend verwenden), habe ich Folgendes erhalten:
root@ubuntu:~# echo -e "GET /" | nc 88.191.133.41 80
root@ubuntu:~#
Es scheint, dass Ubuntu standardmäßig nc.openbsd und nicht nc.traditional verwendet (was bei Debian der Standard ist). Sobald ich die traditionelle Version verwende, erhalte ich die gewünschte Ausgabe:
root@ubuntu:~# echo -e "GET /" | nc.traditional 88.191.133.41 80
XX.XX.XX.168
Merkwürdig ist, dass beide Ihrer Client-Rechner nc.openbsd haben, sich aber dennoch unterschiedlich verhalten. Natürlich könnte es sein, dass einer von ihnen entweder eine andere Version von nc.openbsd oder eine ganz andere Version von Ubuntu hat. In beiden Fällen können Sie Ihre Versionen von nc.openbsd synchronisieren oder zu nc.traditional wechseln.
Antwort2
Funktioniert bei mir :)
michael@challenger:~$ echo -e "GET /\n" | nc 88.191.124.41 80
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
Wenn Sie versuchen, den virtuellen Host anzusprechen, machen Sie das falsch. Sie müssen einen Host:-Header senden, um den virtuellen Host zu identifizieren, den Sie verwenden möchten.
Die beste Möglichkeit, Ihren „Was ist meine IP“-Dienst zu verwenden, wäre curl. Hey, schau mal, ich habe dasselbe Problem, wenn ich das mache, was du machst:
michael@challenger:~$ echo -e "GET /" | nc ip.mydomain.ca 80
michael@challenger:~$ curl ip.mydomain.ca
192.168.0.135
REPARIEREN SIE IHRE VHOSTS!!!
michael@challenger:~$ curl -v 88.191.124.41
* About to connect() to 88.191.124.41 port 80 (#0)
* Trying 88.191.124.41... connected
* Connected to 88.191.124.41 (88.191.124.41) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.21.3 (x86_64-pc-linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
> Host: 88.191.124.41
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 25 Nov 2011 22:11:31 GMT
< Server: Apache/2.2.14 (Ubuntu)
< Last-Modified: Wed, 25 Aug 2010 08:11:38 GMT
< ETag: "840d09-b1-48ea16e57f5a6"
< Accept-Ranges: bytes
< Content-Length: 177
< Vary: Accept-Encoding
< Content-Type: text/html
< X-Pad: avoid browser bug
<
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
* Connection #0 to host 88.191.124.41 left intact
* Closing connection #0
Antwort3
Legen Sie eine Wartezeit fest und versuchen Sie es erneut:
$ echo "GET /" | nc -w 3 88.191.124.41 80