2010-11-23 37 views
2

J'ai un serveur Linux très basique fonctionnant sur une caméra IP (Busybox). Je voudrais obtenir l'IP publique de cette caméra, qui se trouve derrière un routeur. Il n'a pas « wget » ni « traceroute » et « ping » est tout simplement répondre « vivant » ou « non vivant » ...Obtenir mon IP publique en utilisant netcat

Le seul disponible est un « netcat » de base:

nc 
BusyBox v1.1.3 (2009.12.07-16:16+0000) multi-call binary 
Usage: nc [OPTIONS] [IP] [port] 
Netcat opens a pipe to IP:port 
Options: 
     -l    listen mode, for inbound connects 
     -p PORT   local port number 
     -i SECS   delay interval for lines sent 
     -w SECS   timeout for connects and final net reads 
     -4    Use IPv4 (default) 
     -6    Use IPv6 
     -D DSCP   set IP DSCP field 
     -P PRIO   set VLAN user-priority 

Si mon FAI autorise le HTTP sortant, est-il possible d'utiliser netcat pour obtenir la réponse IP publique d'un site tel que www.obtainip.com ou similaire?

GRAND et beaucoup merci à vous deux, car je ne me sentais pas à l'aise avec nc du tout.

Voici les 2 moyens de travail:

echo "GET /automation/n09230945.asp HTTP/1.0" > http_req2.txt 
echo "Host: www.whatismyip.com" >> http_req2.txt 
echo "" >> http_req2.txt 
echo "" >> http_req2.txt 
IP2=$(cat http_req2.txt | nc www.whatismyip.com 80 | tail -n 1) 
echo $IP2 
YEAH ! 

et plus étrange, mais ... cela fonctionne aussi:

echo "GET/HTTP/1.0" > http_request.txt 
echo "Host: www.whatismyip.com" >> http_request.txt 
echo "User-Agent: netcat" >> http_request.txt 
echo "Referer: http://www.whatismyip.com/" >> http_request.txt 
echo "" >> http_request.txt 
echo "" >> http_request.txt 
IP=$(cat http_request.txt | nc www.whatismyipaddress.com 80 | tail -n 1) 
echo $IP 
YEAH again! 

EDIT Bien sûr, cela peut être scénarisé mieux comme suggéré:

echo -e "GET /automation/n09230945.asp HTTP/1.0\n"Host: www.whatismyip.com\n\n" | nc www.whatismyipaddress.com 80 | tail -n 1 
+0

Installez wget ou curl ou ...? –

+0

hum Je ne peux pas installer wget ou curl sinon j'aurais aimé faire ça. – hornetbzz

Répondre

3

créer un fichier appelé « script »

mis cela dans le contenu

GET /automation/n09230945.asp HTTP/1.0 
Host: www.whatismyip.com 

Assurez-vous qu'il ya 2 linefeeds vides sur le fond (cet éditeur leur montrer coutume)

puis exécutez

cat script | nc www.whatismyip.com 80 | tail -1 

Il y a votre ip ...vous pouvez le mettre dans une variable comme

IP=`cat script | nc www.whatismyip.com 80 | tail -1` 
echo $IP 

Cela renverra simplement l'adresse IP, pas de chichi

+0

Beaucoup de thx de cette façon fonctionne directement hors de la boîte :-) – hornetbzz

+0

Cela ne fonctionne pas pour moi. J'ai créé le fichier 'script' avec le contenu approprié (y compris deux lignes vides en bas). Mais 'script chat | nc www.whatismyip.com 80 | la queue -1' n'imprime rien. Si je simplifie à 'script chat | nc www.whatismyip.com 80', il n'imprime toujours rien. – solvingPuzzles

+1

L'automatisation de whatismyip est en panne, utilisez ceci: 'nc icanhazip.com 80', puis' GET/'. – fotinakis

2

Vous pouvez pouvez ne TCAT pour envoyer un travail, requête HTTP en conserve:

commande

cat httpreq.txt | nc www.whatismyip.com 80 

httpreq.txt (assurez-vous de mettre fin au fichier avec au moins deux lignes blanches)

GET/HTTP/1.0 
Host: www.whatismyip.com 
User-Agent: netcat 
Referer: http://www.whatismyip.com/ 


<<don't forget your blank lines above here>> 

... mais vous aurez toujours besoin d'un mécanisme pour analyser la réponse HTTP.

Même si vous pouvez trouver un service Web «qu'est-ce que mon adresse IP» qui renvoie uniquement l'adresse IP sans fioriture en texte brut (sans avoir à analyser HTML), vous devrez toujours analyser les en-têtes de réponse HTTP.

De quelles fonctionnalités disposez-vous pour effectuer une analyse de chaîne? FRAPPER? sed? awk? Edit: ressemble à superfro found a plain-text "Qu'est-ce que mon ip" service, et un moyen facile d'analyser les en-têtes de réponse HTTP.

+0

oui j'ai queue, sed et grep disponible mais pas awk. Je peux aussi écrire des scripts bash en utilisant telnet. incroyable que je reçois une erreur 500 en utilisant tout droit comme il est, mais je reçois l'adresse IP publique, en gardant la httpreq.text avec nc à www.whatismyipaddress.com, comme ceci: chat http_request.txt GET/HTTP/1.0 Hôte: www.whatismyip.com User-Agent: netcat Référence: http://www.whatismyip.com/ IP = $ (cat http_request.txt | nc www.whatismyipaddress.com 80 | tail - n 1) – hornetbzz

+0

Jetez un coup d'œil à la solution de superfro. Puisque vous avez la queue. :-) –

+0

Je pense que je vais plutôt garder le vôtre car il semble plus générique et j'ai peur que ce "GET /automation/n09230945.asp" disparaisse quelques jours. – hornetbzz

0

si vous avez sed sur votre boîte, vous pouvez essayer

echo -e "GET /automation/n09230945.asp HTTP/1.1\r\nHost: www.whatismyip.com\r\n" | nc -w1 www.whatismyip.com 80 | sed -ne '$p' 
+0

IP = $ (echo -e "GET /automation/n09230945.asp HTTP/1.1 \ r \ nHôte: www.whatismyip.com \ r \ n" | nc -w1 www.whatismyip.com 80 | tail -1) – Soenke

+0

thx, je suis plutôt à l'aise avec sed. – hornetbzz

1
(echo GET /; echo) |nc www.whatismyipaddress.com 80 | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" 
3

Puisque l'automatisation de whatismyip.com est en panne, voici une alternative:

$ echo GET/| nc icanhazip.com 80 

... qui va sortir votre adresse IP.

+0

Cool. Cela pourrait être un liner 'echo GET/| nc icanhazip.com 80' – avalanchy

+0

Mis à jour pour utiliser simplement curl. – fotinakis

+0

La question est de savoir comment obtenir IP externe avec l'utilisation de ** netcat **, pas curl. – avalanchy