Tengo un vhost en mi servidor web cuyo único objetivo es devolver la dirección IP del cliente:
petrus@bzn:~$ cat /home/vhosts/domain.org/index.php
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Esto me ayuda a solucionar problemas de red, especialmente cuando se trata de NAT. Como tal, no siempre tengo una resolución de nombre de dominio y este servicio debe funcionar incluso si lo consulta por su dirección IP.
Lo estoy usando de esta manera:
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
Sin embargo, descubrí que no funcionaba al menos desde una computadora:
petrus@seth:~$ echo "GET /" | nc ydct.org 80
petrus@seth:~$
petrus@seth:~$ echo "GET /" | nc 88.191.133.41 80
petrus@seth:~$
Lo que verifiqué:
Esto no está relacionado con ipv6:
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
la versión es la misma (excepto la plataforma, 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
Funciona cuando se usa sin la tubería:
petrus@seth:~$ nc ydct.org 80
GET /
2a01:e35:ee8c:180:221:85ff:fe96:e485
Y la tubería funciona al menos con un servicio de prueba ( netcat
escuchando en 1234/tcp y salida a stdout)
petrus@bzn:~$ nc -l -p 1234
GET /
petrus@bzn:~$
petrus@seth:~$ echo "GET /" | nc ydct.org 1234
petrus@seth:~$
No sé si este problema está más relacionado con netcat
o Apache
, ¡pero agradecería cualquier sugerencia para solucionar este problema!
bzn
es el servidor,hive
es un cliente que funciona yseth
es el cliente en el que tengo el problema.
Editar: también funciona con tuberías telnet
, pero telnet
no permite.
Segunda edición en respuesta a MickeyB:
De hecho, los encabezados de host no se transmiten, pero como se vio con hive
el host anterior, configuré el default
vhost de Apache para que se comporte como ydct.org
vhost:
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>
Sin embargo, funciona con curl
!
petrus@seth:~$ curl ydct.org
2a01:e35:ee8c:180:221:85ff:fe96:e485
Salida de apache2 -S
publicado enhttp://pastebin.com/aSf446Jv
Pero me gustaría saber por qué no funciona con netcat
...
Respuesta1
En resumen, es la versión de netcat que estás ejecutando.
Probé la cadena de comando en mis máquinas de la siguiente manera:
Mac OS X León:
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 (versión 6)
root@debian:~# echo -e "GET /" | nc 88.191.133.41 80
XX.XX.XX.168
No fue hasta que llegué a Ubuntu "lúcido" (que es lo que aparentemente estás ejecutando) cuando obtuve esto:
root@ubuntu:~# echo -e "GET /" | nc 88.191.133.41 80
root@ubuntu:~#
Parece que Ubuntu tiene por defecto nc.openbsd en lugar de nc.traditional (que es el valor predeterminado en Debian). Una vez que utilicé la versión tradicional, recibí el resultado deseado:
root@ubuntu:~# echo -e "GET /" | nc.traditional 88.191.133.41 80
XX.XX.XX.168
Lo curioso es que ambas máquinas cliente tienen nc.openbsd, pero tienen un comportamiento diferente. Por supuesto, podría ser que uno de ellos tenga una versión diferente de nc.openbsd o una versión completamente diferente de Ubuntu. En cualquier caso, puede sincronizar sus versiones de nc.openbsd o cambiar a nc.traditional.
Respuesta2
Funciona para mi :)
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>
Si está intentando acceder al vhost, lo está haciendo incorrectamente. Debe enviar un encabezado Host: para identificar el host virtual que desea utilizar.
La mejor manera de utilizar el servicio 'cuál es mi IP' sería curl. Oye, mira, veo el mismo problema por mi parte cuando hago lo que estás haciendo tú:
michael@challenger:~$ echo -e "GET /" | nc ip.mydomain.ca 80
michael@challenger:~$ curl ip.mydomain.ca
192.168.0.135
¡¡¡ARREGLA TUS VHOST!!!
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
Respuesta3
Establece un tiempo de espera y vuelve a intentarlo:
$ echo "GET /" | nc -w 3 88.191.124.41 80