/ / Programové objavovanie verejnej IP v bashe na Linuxe - bash, networking, ip

Objavovanie verejnej IP programovo v bash na Linuxe - bash, networking, ip

Našiel som príspevok, ktorý robí to, čo potrebujem, ale v systéme Windows:

Programové objavovanie verejnej adresy IP

> tracert -d www.yahoo.com

`Tracing route to www-real.wa1.b.yahoo.com [69.147.76.15]
over a maximum of 30 hops:`

1    <1 ms    <1 ms    <1 ms  192.168.14.203
2     *        *        *     Request timed out.
3     8 ms     8 ms     9 ms  68.85.228.121
4     8 ms     8 ms     9 ms  68.86.165.234
5    10 ms     9 ms     9 ms  68.86.165.237
6    11 ms    10 ms    10 ms  68.86.165.242

The 68.85.228.121 is a Comcast (my provider) router. We can ping that:

ping -r 9 68,85,228,121 -n 1

Pinging 68.85.228.121 with 32 bytes of data:

Reply from 68.85.228.121: bytes=32 time=10ms TTL=253 Route: 66.176.38.51 ->

68.85.228.121 ->

68.85.228.121 ->

192.168.14.203

Voila! The 66.176.38.51 is my public IP.

Táto (tretia) odpoveď ukazuje spôsob, ako získať adresu IP môjho ISP a ako potom použiť príkaz ping na získanie adresy IP.

V systéme Linux nefunguje upravene. Traceroute funguje namiesto tracertu, ale pretože jeho výstup je nepredvídateľný, nie som si istý, ako ho analyzovať.

Dostal som sa tak ďaleko

IP="$(traceroute -d www.yahoo.com | grep " 2 " | sed -e "s/.*((.*)).*/1/")"

ale grep je (zle) pevne zakódovaný. Nevidel som, ako dostať ping do práce ako v príklade.

Každý vstup by bol ocenený.

odpovede:

4 pre odpoveď č. 1

Osobne by som spustil tento príkaz:

wget -qO- whatismyip.org


0 pre odpoveď č. 2

Toto nie je spoľahlivé riešenie, pasívny spôsob akourobte to tak, že napíšete skript, ktorý vytiahne vašu stavovú stránku „WAN“ vášho smerovača. Môžete to robiť koľkokrát chcete a nikto sa nebude sťažovať na nadmerné skúmanie.


0 pre odpoveď č. 3

ok, viem, že toto je staré vlákno, ale tento príspevok mi odhalil niektoré veci a kombinuje ho s tým, čo som sa už naučil, myslím, že som prišiel s solídnym riešením.

Grep, ktorý chcete, je:

grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"

Moje osobné riešenie na nájdenie mojej externej adresy IP bolo:

curl icanhazip.com

Teraz je to:

ISP=`traceroute -M 2 -m 2 8.8.8.8 | grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"` | ping -R -c 1 -t 1 -s 1 $ISP | grep RR | grep -m 1 -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" > .extIP

a potom

cat .extIP

Bavte sa!


0 pre odpoveď č. 4

Iba som skombinoval to, s čím hovorila @pizza toto odpoveď a vytvoril nasledujúci pracovný skript. Nie je to také pekné ako používať niečo ako traceroute, ale je to oveľa menej komplikované.

   #!/bin/bash
content="$(wget http://checkip.dyndns.org/ -q -O -)"
myip="$(<<< "$content" sed -e "s/.*Current IP Address: //" -e "s/<.*//")"
echo "myip = [${myip}]"

Na wget príkaz načíta výsledok požiadania dyndns o moju IP. Potom, sed odrezáva všetko pred a po návrate dyndns adresy IP.

Ako je uvedené inde, webové stránky, ako napríklad dyndns, môžuzablokujte také požiadavky, ak sú predkladané príliš často, ale pretože vaša adresa IP by mala zostať vo väčšine situácií konštantná najmenej po dobu vašej relácie, ak nie po mnoho dní, nemalo by byť potrebné tento skript spúšťať veľmi často.


0 pre odpoveď č. 5

AK chcete jednoduchosť a nespoliehajte sa na iné servery (alebo služby), skúste:

dig +short myip.opendns.com @resolver1.opendns.com

To vypľuje iba vašu adresu

alebo,

#!/bin/bash
myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo "myip = [${myip}]"