Genel IP adresini bir kabuk komut dosyasında bulma


39

IP adresimi ifconfig veya hostname -i komutunu kullanarak bulabilirim.

Ancak Genel IP’mi nasıl bulabilirim?

(Statik bir IP'm var ama unix komutunu kullanarak öğrenmek istiyorum)


Bunu programlı bir şekilde yapmaya mı çalışıyorsun?
Andrew Keith,

evet kabuk senaryosunda
shantanuo

1
Linux, MacOSX, FreeBSD, vs kullanıyor musunuz? 'İfconfig' çıktısı bu farklı işletim sistemleri için farklıdır ve 'ip' komutu MacOSX'ta yoktur. Bilgisayarınızın IP'sini mi arıyorsunuz (ifconfig veya başka bir şeyi ayrıştırmak için bir kabuk betiğine ihtiyacınız olacak) veya yönlendiriciniz (Aşağıdaki web siteleri işe yarayabilir)?
Stefan Lasiewski

Yanıtlar:


49

curl ifconfig.me

curl ifconfig.me/ip (sadece ip için)

curl ifconfig.me/all (daha fazla bilgi için zaman alır)

Daha fazla komut için ziyaret edin: http://ifconfig.me/#cli_wrap


1
IPv6 adreslerinden ne haber?
Matt3o12

Bu bağlantı öldü. Bunun yerine bunu kullanabilirsiniz:curl http://checkip.amazonaws.com/
Farhan.K

@ Farhan.K lütfen bunu en iyi cevap olduğundan bu yanıt olarak gönderin. Bunu yapmazsan, öneren isminden bahsedeceğim ve
söyleyeceğim

@Aliostad göndermekten çekinmeyin :)
Farhan.K

@ Farhan.K argh, korumalı: /
Aliostad

26

Talep edebilirsiniz myip.opendns.com. OpenDNS'den. dig @208.67.222.220 myip.opendns.com


8
Bu sadece harika. Herhangi bir versiyonunu daha kolay hatırlamak için koyabilirsiniz dig @resolver1.opendns.com myip.opendns.com. Veya Windows üzerinde: nslookup myip.opendns.com resolver1.opendns.com.
Michael Kropat

2
Benim için en iyi olan şey: dig @208.67.222.220 myip.opendns.com +shortbütün ipi kullanmak zorunda kalmadan doğrudan ipi almak.
Christopher Chiche,

18

dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short

dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

dig -4 @resolver1.opendns.com -t a myip.opendns.com +short


Yukarıdakilerin yalnızca şu anda IPv4 için çalıştığını unutmayın (bu çözümleyicilerin hiçbiri şu anda IPv6'ya sahip bile gözükmüyor, ancak ihmal ederseniz -4ve açıkça belirtmiyorsanız -t a, gelecekte kullanımda bozulma riskiyle karşı karşıya kalırsınız ( txtaslında Google’ın dışında IPv6 bir gün, Google tarafından düzgün şekilde etkinleştirildiyse)).

Bunun myip.opendns.comyalnızca çözülebilir resolver1.opendns.comve bununla çözülemeyeceğine dikkat edin auth1.opendns.com- bu nedenle, bazı DNS kaçırma ve kendi etki alanı adlarının ortasında bir adam yapıyor gibi görünüyor! Bu nedenle, resolver1.opendns.comyetkili olmadığı için rastgele bir çözücünün IP'sini bulmak için kullanamazsınız myip.opendns.com.

Not o o-o.myaddr.l.google.comen esnek ve geleceğe dönük yaklaşım gibi görünüyor; DNS çözücünüzün, istemci alt ağı için deneysel EDNS0 uzantısını destekleyip desteklemediğini test etmek için bile iyidir (ki çok az sayıda çözücünün desteği vardır):

% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options:  printcmd
o-o.myaddr.l.google.com. 60     IN      TXT     "74.125.189.16"
o-o.myaddr.l.google.com. 60     IN      TXT     "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec  8 20:38:46 2013
;; MSG SIZE  rcvd: 114

2
Matt3o12 @ <ı OpenDNS bulundu: dig +short AAAA myip.opendns.com @2620:0:ccc::2.
bufh

Günümüzde Google’dan TXT kayıtları alma yöntemi hem IPv4'ü hem de IPv6'yı desteklemektedir, bu nedenle belirtmeniz gerekir -4veya -6belirli bir IP sürümüne ihtiyacınız varsa.
Martin

12

İnternet erişiminiz varsa çok basit bir cevaplama:

curl icanhazip.com

IP’niz için üçüncü taraf kaynaklara güvenmek, özellikle de bu verilerle yaptığınız özel bir anlamı varsa, sorunlu olabilir.

Daha güvenilir bir yöntem, bilinen ve güvenilir bir DNS sunucusu seçmek (ideal olarak DNSSEC çalıştıran) ve DNS sunucunuzun bu tür girişleri içermesini sağlayarak kutunun ana bilgisayar adını sorgulamaktır;

dig @trustworthysource.com +short `hostname`



5

Eğer

  1. yalnızca bir ortak IP adresiniz var ve
  2. İnternete doğrudan bağlıysanız (NAT / proxy / VPN vb. değil)

o zaman tüm arayüzlerinizin IP adreslerinin listesini almak için çıktıyı sadece arabirimlerin IP adresleri ("inet addr:" bölümü) için ifconfig'den ayrıştırabilirsiniz. Özel aralıkta olmayan bir IP adresi (bkz. Http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ), genel IP adresinizdir.

Aynı liste ayrıca aracılığıyla da edinilebilir.

ip addr show

ayrıştırmak daha kolay olabilir.

Doğrudan bir internet bağlantınız (NAT vb.) Yoksa, genel IP adresinizi harici yardım almadan bulamazsınız (bilgisayarınız bilmediğinden). O zaman diğer cevaplarda olduğu gibi yapman gerekecek.


4

NAT Traversal için tasarlanan STUN protokolünü kullanarak biraz farklı bir yaklaşım kullandım. Eğer Ubuntu kullanıyorsanız, sadece "stun" paketini yazarak kurabilirsiniz:

sudo apt-get install stun

Paket muhtemelen ihtiyaç duymayacağınız bir STUN sunucusu kurar, fakat aynı zamanda bu sorunu çözmek için kullandığım bir STUN test istemcisiyle birlikte gelir. Artık genel IP'nizi bir (çok basit değil) komutuyla alabilirsiniz:

stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq

Şimdi, yaptığı şey: stun, genel STUN sunucusuyla "stunserver.org" iletişim kurar ve genel IP adresinize geri bir cevap alır, komutun geri kalanı yalnızca IP'yi çıktıdan filtrelemek içindir.


stun.l.google.com daha hızlı: D
Zibri

3

Bir yol, sayfasından bir istek yapabilirsiniz

http://www.biranchi.com/ip.php

sisteminizin IP adresini döndürür


Bir metin / html türünde düz metin sunar ...
bortzmeyer

IP adresini tarayıcınızda göstermiyor mu?

2
Ancak yanlış tipte.
bortzmeyer

@bortzmeyer Uh, "doğru tip" nedir? text/htmlsözde API'nin döndürdüğü şey için sorun değil - kesinlikle XML veya JSON değil. text/plainbelki, ama tamamen kullanılabilir text/html.
ceejayoz

3
Grepleme gerektirmeyen bir sayfa için +1. Ayrıcawget -q -O - http://wgetip.com/
xofer 10:11

3

Google şimdi genel IP adresinizi görüntüler: http://www.google.com/search?q=ip


Bu benim için çalışmıyor, bir tarayıcıda veya curl üzerinden.
Ladadadada

Bu garip. Mine, "Açık IP adresiniz XX.XX.XXX.XX - Daha fazla bilgi edinin" diyor.
Jake Wilson

3G bağlantımda çalıştım. Burada daha fazla puan öğrenin .
Ladadadada

Google bazı garip nedenlerden dolayı IP adresinizi yalnızca User-Agentsayfada hangi dizginin sağlandığına bağlı olarak gösterir. Firefox ile çalışır; ancak "Firefox" dizgisi devre dışı bırakılmış SeaMonkey devre dışı ("general.useragent.compatMode.firefox" aracılığıyla false olarak ayarlanır), birden bire olmaz. SeaMonkey de dahil olmak üzere eşit derecede uyumlu olan Gecko tabanlı pek çok masaüstü tarayıcısı bulunduğundan, Google’ın bu gibi şeyleri yalnızca herhangi bir Gecko yerine yalnızca Firefox için neden açıkça etkinleştirdiğine dair hiçbir fikriniz yok.
04 Ocak'ta

curl -qs " google.com/search?q=blowme"|tr " () "" \ n "| grep Müşteri | cut -d": "-f 2 | tr -d" "
Zibri

3

Tamam ... Bunun aslında YOL olduğunu biliyorum ve ilan etmeye bile değmez ama işte benim çalışma çözümüm.

#!/bin/sh

IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP

Güzel ve basit.


2
Bu, istenmeyen dahili IP adresini döndürür. Ancak, bilginiz için, bunu da hostname -I(capital 'i') komutuyla yapabilirsiniz .
Redsandro

3

En basit yolu, önerildiği gibi http://ifconfig.me/ kullanmaktır .

Bu sayfada, hangi bilgileri almak istediğinizde hangi komutu kullanacağınızı bileceksiniz.

IP için:

curl ifconfig.me
veya
curl ifconfig.me/ip

Genel Ana Bilgisayar Adı için:

curl ifconfig.me/host

XML dosyasındaki tüm bilgiler için:

curl ifconfig.me/all.xml

etc ... sadece http://ifconfig.me adresine bakın


2

Bunu çok yapıyorum ve birçok cihazdan bir sunucuda kendi iki hizmetimi yaptım:

  1. Bir web sunucusu kökünde php dosyası:

    user@host:~$ cat index.php`
    <?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
    

    Bir kabukta kullanım:

    $ curl -4 mydomain.com
    79.22.192.12
    

    ayrıca ipv6 ile çalışma:

    $ curl mydomain.com
    2a01:e34:ee7d:180::3
    

    Netcat ile:

    $ echo "GET /" | nc myserver.com 80
    2a01:e34:ee7d:180::3
    

    Cisco yönlendiricisinde:

    router#more http://myserver.com/index.php
    79.22.192.12
    
  2. özel telnet sunucusu ile hızlıca kesmek: xinetd spawning / usr / bin / env:

    service telnet
    {
       server           = /usr/bin/env
       socket_type      = stream
       protocol         = tcp
       flags            = IPv6
       wait             = no
       port             = 23
       cps              = 3 30
       passenv          = %a
    }
    

    ve sonra ona telnet:

    $ nc -4 myserver.com 23
    REMOTE_HOST=::ffff:79.22.192.12
    
    $ nc myserver.com 23
    REMOTE_HOST=2a01:e34:ee7d:180::3
    

    bir yönlendirici ile aynı çalışır:

    router#telnet myserver.com
    79.22.192.12
    

Bu şekilde, iletişimde bir miktar nat veya proxy varsa ve hangi IP üzerinden göründüğünüzü bilmek istiyorsanız, dahili ağınızda çalışmasını sağlayabilirsiniz.

Herhangi bir üçüncü taraf hizmeti gerektirmez.


2

Harici kaynaklara güvenmekten kaçınmak için, umarım, yönlendiricime telnet yapmak ve ortak arabiriminin ip adresini almak için beklerim kullanılır. İşte bir bekleyiş betiği:

#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]

spawn telnet $ip
expect "login:" {
    send "$username\r"
}
expect "Password:" {
    send "$password\r"
}
expect "#" {
    send "ifconfig ppp0 | grep inet\r"
    send "exit\r"
}
expect eof

Sonra genel ip elde etmek için yukarıdaki betiği çalıştırmak:

./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1

Elbette bu, yönlendiriciye yönetici erişimine sahip olduğum varsayımına ve bunun ifconfig komutunun bulunduğu linux tabanlı bir yönlendiriciye dayanıyor.




1

İstediğiniz şey, yönlendiricinizde harici ip adresini bulmaksa, yönlendiriciden kendi wan adresini ister veya dışarıdan birinden sizin için almasını isteyin.

manuel bir yol için, gelen isteğin ipini döndürecek olan yukarıdaki sitelere göz atabilirsiniz.

Otomatik bir yol için deneyebilirsiniz:

wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\. 

http yanıtında ip adresini içeren satırı alırsınız, sonra sed, awk, vb. ile ayrıştırır.


0

harici IP'lerinizi kontrol etmek için dış kabuğu kullanarak dış kabuğu da kullanabilirsiniz.

#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80              
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line 
do  
    case "$line" in
        *"Your local IP address is"* ) 
            line="${line#*Your local IP address is&nbsp;}"
            line=${line%%</p>*}
            echo "Your ip is: $line"
            exec >&5-
            exit
            ;;            
    esac
done <&5

çıktı


0
lynx - dökümü http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *'
-m1 

0

Bunu yapıyorum. Herhangi bir üçüncü taraf katılımı olmadan bana sadece IP veriyor.

IP adresi göster | grep eth0 | grep inet | tr -s "" | kesilmiş -f3 -d "" | -f1 -d "/" kesilmiş


3
Genel IP adresini istiyor. Yerel değil.
Jake Wilson,

0
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

0

İşte, işletmenin uzaklaşan veya biçimini değiştirebilecek "kamu hizmeti" siteleri yerine dinamik IP yönetimiyle ilgili çözüm arayan ana bilgisayarlara bağlı olan başka bir alternatif.

1) Sunucunuzu birçok ücretsiz dinamik dns hizmetinden birine (örneğin no-ip.com) kaydedin. Bu size xxx.no-ip.org gibi bir DNS girişi verecektir.

2) Servisin dinamik güncelleme aracını kurun (IP değişikliklerini servise bildirir).

IP adresini bir komut dosyasında almak için şunu yapın:

$external_ip = `dig +short xxx.no-ip.org`

Dinamik IP'nin değişip değişmediğini ve bazı yapılandırma girişlerinin değiştirilmesi gerekip gerekmediğini kontrol etmek için cron işinde kullanım için idealdir.


0

OS X'te, hem özel hem de genel IP elde etmek için iki basit çözüm var (LaunchBar kullanıyorsanız bonus kodu ile).

Özel IP

$ ipconfig getifaddr $1
# $1=en0 || en1 || en*

LaunchBar Komut Dosyası

#!/bin/sh

title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)

open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"

Genel IP

$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||    
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com

LaunchBar Komut Dosyası

#!/bin/sh

title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)

open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.