Perintah Shell untuk Mendapatkan Alamat IP?

Jawaban:

32

/sbin/ifconfig -a

mpbloch
sumber
Yup dan jika Anda berencana untuk mengelola server dari jarak jauh, vi /etc/network/interfacesdan atur antarmuka untuk static(lihat help.ubuntu.com/8.10/serverguide/C/network-configuration.html )
gravyface
Menjalankan perintah ini mengungkapkan daftar seluruh angka. Yang mana yang harus kita gunakan? Itu inet addr?
ComputerScientist
25

Anda dapat gunakan:

/bin/ip addr
Robert Swisher
sumber
3
@opierce Anda telah menandai jawaban mpbloch sebagai benar, tetapi sebagai FYI, Anda harus menggunakan jawaban ini, karena ini adalah bagian dari iproute2 suite. ifconfigsedang bertahap sekarang.
jwbensley
3
Anda dapat membuatnya lebih pendek hanya dengan berlari ip a.
gak
19

Jika Anda memiliki alamat internal yang digunakan, periksa

curl http://myip.dnsomatic.com

mungkin ide yang bagus di shell unix.
Atau, cukup masukkan URL itu ke browser Anda.


Jika Anda mendapatkan jawaban yang berbeda dari " ifconfig -a" hasil,
yang ifconfigmemberi alamat internal Anda - yang mungkin tidak akan bekerja dari luar.


Bahkan jika semua tampak baik-baik saja, Anda dapat memiliki firewall di tempat yang akan melarang koneksi ssh yang masuk .
Di mana Anda harus mencoba port yang menarik dari browser pada mesin di,

http://www.canyouseeme.org/

Itu akan mengkonfirmasi konektivitas melalui,

  • alamat IP eksternal (menunjukkannya kepada Anda di halaman itu)
  • NAT, Port Forward
  • Firewall
nik
sumber
Benar, tetapi jika itu masalahnya, mungkin tidak ada aturan NAT / Port Forwarding untuk mencocokkan ssh dengan apa pun IP internal.
Kyle Brandt
@Kyle, Yang dapat ditambahkan ...
nik
3
+1 untukcurl http://myip.dnsomatic.com
JatSing
Mirip dengan ini, ada jugacurl ifconfig.me
jwbensley
19

/bin/hostname -i

James
sumber
3
Dalam hal ini saya sarankan menggunakan hostname --all-ip-addresses. Tampilkan semua alamat jaringan host. Opsi ini menyebutkan semua alamat yang dikonfigurasi pada semua antarmuka jaringan. Antarmuka loopback dan alamat IP-link-lokal dihilangkan. Berlawanan dengan opsi -i, opsi ini tidak bergantung pada resolusi nama. Jangan membuat asumsi tentang urutan output.
lrkwz
5
Alternatif yang lebih pendek untuk komentar @ lrkwz/bin/hostname -I
hanxue
Terima kasih @hanxue - ini seharusnya menjadi jawaban sendiri - perintah terpendek dengan output terbersih - hanya apa yang saya cari! Dalam pengalaman saya (Ubuntu), /bin/hostname -ihanya memberi 127.0.1.1, yang tidak berguna.
Roger Dueck
9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Jika Anda memerlukan alamat internal Anda tambahkan antarmuka Anda setelah ifconfig, mis

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'
Johan
sumber
+1, inilah tepatnya yang saya butuhkan untuk menyelesaikan masalah. Hore untuk one-liners!
J. Polfer
+1 Tanpa kepala -1: / sbin / ifconfig | grep inet | sed 's / \: / /' awk 'NR == 1 {print $ 3}'
joeslice
Terima kasih, ini berfungsi pada Debian tetapi pada OS X tidak berfungsi, mengembalikan beberapa sampah. Alangkah baiknya jika kita bisa membuat garis yang bekerja pada keduanya. Berikut ini adalah keluaran ifconfig pada OS X: gist.github.com/ssbarnea/5814657
sorin
3

Jika Anda perlu mencari tahu alamat IP router Anda, Anda bisa menjalankan perintah ini.

gali + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

Jika Anda menggunakan OpenDNS untuk server dns Anda, Anda dapat mempersingkatnya menjadi:

gali + short myip.opendns.com

Anda juga bisa menggunakan perintah ini.

curl http://myip.dnsomatic.com
Brad Gilbert
sumber
3

Jika Anda memiliki banyak antarmuka, bisa berguna untuk menentukan IP mana yang Anda inginkan. jika Anda ingin alamat IPV4 antarmuka 'eth0':

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

jika Anda ingin alamat IPV6 antarmuka 'eth0':

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

jika Anda ingin mencari IP antara dua antarmuka umum sebuah laptop, wlan0 dan eth0:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done
LoreLLo
sumber
3

Hanya menggulung halaman ini :

$ curl wtfismyip.com/text

mansi
sumber
Dan bagaimana tepatnya ini lebih unggul dari layanan serupa yang telah disebutkan selama ini?
Esa Jokinen
2

Ini adalah satu baris yang bekerja di Linux dan OS X juga, dan itu akan mengembalikan alamat pertama yang bukan lokal:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

Kirim kredit ke /programming//a/13322549/99834

Sorin
sumber
2
LOCAL_IP=`/bin/hostname -I | sed 's/ //g'`
Mohammed Saqib Rajput
sumber
1

Mungkin cara paling sederhana untuk melakukannya

ifconfig eth0

dengan asumsi mesin memiliki alamat IP tunggal pada antarmuka kabel standar - Anda mungkin perlu

ifconfig wlan0

jika ada WiFi.

David North
sumber
1
ip address show scope link

Ini akan menunjukkan kepada Anda alamat IP living - memiliki tautan - antarmuka. Tapi itu bukan perintah bash. Bash tidak memiliki kemampuan untuk mengetahui tentang IP dan jaringan sama sekali.

Saabi
sumber
1

Yang saya mengerti adalah Anda ingin menghubungkan mesin ubuntu jarak jauh yang memiliki ip dinamis. Buka situs dyndns.org dan buka akun gratis. Kemudian pada mesin jarak jauh Anda perlu menginstal alat ip dinamis.

sudo aptitude install dyndns-client

sehingga Anda dapat ssh melalui mesin remote

ssh username@yourdynamicnamealias.dyndns.org

Jadi setelah konfigurasi Anda tidak akan pernah memerlukan alamat ip mesin jarak jauh.

Manusia hujan
sumber
Ini adalah metode yang saya sukai untuk berurusan dengan IP dinamis. dyndns.org adalah layanan gratis yang fantastis.
John Barrett
1

Inilah yang saya gunakan:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'
Jlliagre
sumber
1

jika Anda hanya membutuhkan satu IP antarmuka yang dapat Anda lakukan:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 
DmitrySemenov
sumber
0

Jika Anda mencari alamat IP publik kotak tersebut , Anda dapat menggunakan yang berikut:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

Anda dapat menggunakan dig(1)opsi seperti -4atau -6untuk secara khusus mencari alamat IPv4 atau IPv6; Google akan memberikan jawaban dalam catatan TXTjenis, yang akan memiliki tanda kutip ketika disajikan oleh dig; jika Anda ingin menggunakan variabel dengan utilitas seperti traceroute, Anda harus menggunakan sesuatu seperti tr (1) untuk menghapus tanda kutip tersebut.

Pilihan lain termasuk whoami.akamai.netdan myip.opendns.com, yang menjawab Adan AAAAmencatat (alih-alih TXTseperti pada contoh di atas dari Google), jadi, mereka tidak perlu menghapus tanda kutip:

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

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

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

Berikut ini contoh skrip yang menggunakan semua opsi di atas untuk mengatur variabel:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

Jika Anda mencari alamat IP pribadi, atau satu set semua alamat IP yang ditetapkan untuk kotak, Anda dapat menggunakan beberapa kombinasi ifconfig(pada BSD dan GNU / Linux), ip addr(pada GNU / Linux), hostname(opsi -idan -Ipada GNU / Linux) dan netstatuntuk melihat apa yang terjadi.

cnst
sumber