Saya mencoba menggunakan hanya alamat IP (inet) sebagai parameter dalam skrip yang saya tulis.
Apakah ada cara mudah di terminal unix untuk mendapatkan alamat IP saja, daripada melihat-lihat ifconfig
?
shell
unix
ip-address
Tukang batu
sumber
sumber
ip -o address
jauh lebih mudah untuk dikerjakan daripada outputip address
.Jawaban:
Anda dapat menulis skrip yang hanya mengembalikan IP seperti:
Untuk Mac:
Atau untuk sistem linux
sumber
hostname -i
di tambang itu mengembalikan:::1 127.0.1.1 192.168.1.100
hostname
tidak portabel.Ini akan memberi Anda semua antarmuka IPv4, termasuk loopback 127.0.0.1:
Ini hanya akan menampilkan
eth0
:Dan dengan cara ini Anda bisa mendapatkan alamat IPv6:
Hanya
eth0
IPv6:sumber
grep -oP
gagal pada busybox v1.24.1: opsi tidak valid - P-P
mengganti ekspresi reguler Perl atau jika tidak kita tidak dapat menggunakan(?<=inet\s)
token lookbehind . Anda bisa mendapatkan hasil yang serupa dengan menjalankangrep -oe 'inet [0-9\.]\+'
ataugrep -oe 'inet6 [0-9a-f:]\+'
tetapi dengan cara ini saya tidak bisa menghilangkan kata pertama. Dalamman grep
laporan SuSE ,-P
flag bersifat eksperimental.ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
Secara umum, tidak pernah ada jaminan bahwa suatu sistem hanya akan memiliki satu alamat IP, misalnya, Anda dapat memiliki koneksi ethernet dan wlan, dan jika Anda memiliki koneksi VPN aktif maka Anda akan memiliki alamat IP lain.
Linux
Di Linux,
hostname -I
akan mencantumkan alamat IP saat ini. Mengandalkan itu selalu mengembalikan hanya satu alamat IP kemungkinan besar tidak akan berfungsi seperti yang diharapkan dalam beberapa skenario (yaitu tautan VPN sudah aktif), jadi cara yang lebih andal adalah mengonversi hasilnya ke larik dan kemudian mengulang elemen:OSX
Di OSX, jika Anda mengetahui antarmukanya , Anda dapat menggunakan:
yang hanya akan mengembalikan alamat IP.
Atau Anda bisa mengulang nama antarmuka yang mungkin, dimulai dengan sufiks, yaitu
en
:Selain itu, mendapatkan alamat IP menjadi non-deterministik jika kabel dan koneksi wifi dibuat, ketika mesin memiliki lebih dari satu antarmuka ethernet, atau ketika ada terowongan VPN.
Mendapatkan IP eksternal
Jika Anda memerlukan IP eksternal, Anda dapat meminta layanan mode teks, misalnya
curl https://ipecho.net/plain
akan mengembalikan IP eksternal teks biasa .Dan cara yang lebih cepat untuk mendapatkan IP eksternal adalah dengan menanyakan server DNS yang dikenal:
sumber
Perintah ini akan memberi Anda alamat ip persis seperti yang Anda inginkan di Ubuntu.
sumber
Pada versi Ubuntu terbaru ( 14.04 - 16.04 ), perintah ini berhasil bagi saya.
sumber
print $1
mungkin atau mungkin tidak memberi Anda hasil yang benar.Jika Anda memiliki lingkungan terbatas, Anda dapat menggunakan perintah ini:
sumber
ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
. Untuk v4 dan v6:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
ip -4 addr show eth0 | grep inet
lakukan:ip -4 addr show | grep 192
Untuk hanya mendapatkan alamat IP di Mac OS X Anda dapat mengetik perintah berikut:
sumber
Perintah
ifconfig
ini deprected dan Anda harus menggunakanip
perintah pada Linux.Juga
ip a
akan memberi Anda ruang lingkup pada baris yang sama dengan IP sehingga lebih mudah digunakan.Perintah ini akan menunjukkan IP global (eksternal) Anda:
Semua IPv4 (juga 127.0.0.1):
Semua IPv6 (juga :: 1):
sumber
Kita cukup menggunakan hanya 2 perintah (ifconfig + awk) untuk mendapatkan IP (v4) yang kita inginkan seperti:
Di Linux, dengan asumsi untuk mendapatkan alamat IP dari
eth0
antarmuka, jalankan perintah berikut:Di OSX, mengasumsikan untuk mendapatkan alamat IP dari
en0
antarmuka, jalankan perintah berikut:Untuk mengetahui IP publik / eksternal kami, tambahkan fungsi ini di
~/.bashrc
Lalu lari,
whatismyip
sumber
Untuk mencetak hanya alamat IP
eth0
, tanpa teks lain:Untuk menentukan antarmuka utama Anda (karena mungkin bukan "eth0"), gunakan:
Dua baris di atas dapat digabungkan menjadi satu perintah seperti ini:
sumber
Saya menginginkan sesuatu yang sederhana yang berfungsi sebagai alias Bash. Saya menemukan yang
hostname -I
terbaik untuk saya (nama host v3.15).hostname -i
mengembalikan IP loopback, untuk beberapa alasan, tetapihostname -I
memberi saya IP yang benar untuk wlan0, dan tanpa harus menyalurkan output melalui grep atau awk. Kekurangannya adalahhostname -I
akan menampilkan semua IP, jika Anda memiliki lebih dari satu.sumber
Itu akan melakukan trik di Mac:
Itu diputuskan ke
ping 192.168.1.2
dalam mesin saya.Tip pro :
$(...)
berarti menjalankan apa pun yang ada di dalam tanda kurung di subkulit dan mengembalikannya sebagai nilainya.sumber
Di
man hostname
sana bahkan lebih mudah cara yang secara otomatis tidak termasuk loopback IP dan hanya menampilkan daftar terpisah ruang semua ditugaskan untuk alamat host ip:sumber
Anda juga dapat menggunakan perintah berikut:
CATATAN: Ini hanya akan berfungsi jika Anda memiliki konektivitas ke internet.
sumber
Beberapa jawaban tampaknya menggunakan lebih baru
ip
perintah (penggantiifconfig
) jadi di sini adalah salah satu yang menggunakanip addr
,grep
danawk
untuk hanya mencetak alamat IPv4 yang terkait denganwlan0
antarmuka:Meskipun bukan solusi yang paling ringkas atau mewah, ini (bisa dibilang) mudah dipahami (lihat penjelasan di bawah) dan dimodifikasi untuk tujuan lain, seperti mendapatkan 3 oktet terakhir dari alamat MAC seperti ini:
Penjelasan:
ip addr show wlan0
mengeluarkan informasi yang terkait dengan antarmuka jaringan bernamawlan0
, yang seharusnya serupa dengan ini:Berikutnya
grep inet
filter keluar garis yang tidak mengandung "inet" (IPv4 dan IPv6 konfigurasi) dangrep -v inet6
filter keluar garis tersisa yang melakukan mengandung "inet6", yang harus menghasilkan satu baris seperti ini:Terakhir,
awk
ekstrak pertama bidang "172.18.18.1/24" dan yang kedua menghapus singkatan network mask, yang hanya menyisakan alamat IPv4.Juga, saya pikir perlu disebutkan bahwa jika Anda membuat skrip maka seringkali ada banyak alat yang lebih kaya dan / atau lebih kuat untuk mendapatkan informasi ini, yang mungkin ingin Anda gunakan sebagai gantinya. Misal kalo pake Node.js ada
ipaddr-linux
, kalo pake Ruby adalinux-ip-parser
, dll.Lihat juga /unix/119269/how-to-get-ip-address-using-shell-script
sumber
Gunakan perintah berikut:
sumber
Ini adalah versi saya, di mana Anda dapat memberikan daftar antarmuka, diurutkan berdasarkan prioritas:
Jadi jika saya terhubung dengan VPN, Wifi dan ethernet, alamat VPN saya (pada antarmuka tap0) akan dikembalikan. Skrip berfungsi di linux dan osx, dan dapat menggunakan argumen jika Anda ingin mengganti IFLIST
Perhatikan bahwa jika Anda ingin menggunakan IPV6, Anda harus mengganti 'inet' dengan 'inet6'.
sumber
Saya selalu membutuhkan ini pada waktu yang paling tidak terduga dan, tanpa gagal, akhirnya mencari utas seperti ini di SO. Jadi saya menulis skrip sederhana untuk mendapatkan alamat IPv4 melalui netstat, disebut
echoip
- Anda dapat menemukannya di sini . Bash untuk alamat jaringan terlihat seperti ini, ia juga mendapatkan alamat publik Anda dari ipecho.net:The
echoip
Script menghasilkan output seperti ini:sumber
gunakan skrip satu baris ini:
ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'
mac & linux (diuji di ubuntu) keduanya berfungsi.sumber
ifconfig en0
atauifconfig eth1
dll jika Anda tahu antarmuka yang Anda inginkan :)Saya lebih suka tidak menggunakan
awk
dan semacamnya dalam skrip ..ip
memiliki opsi untuk keluaran dalam JSON.Jika Anda keluar
$interface
maka Anda mendapatkan semua alamat ip:sumber
bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
menunjukkan semua ip Anda
sumber
Di Redhat 64bit, ini memecahkan masalah bagi saya.
sumber
sumber
Saat mencari alamat IP eksternal Anda pada host NATed, beberapa jawaban menyarankan menggunakan metode berbasis HTTP seperti
ifconfig.me
misalnya:Selama bertahun-tahun saya telah melihat banyak dari situs ini datang dan pergi, saya menemukan metode berbasis DNS ini lebih kuat:
Saya memiliki alias praktis ini di
~/.bashrc
:sumber
Kedua cara ini berhasil untuk saya:
Untuk mendapatkan alamat IP dari antarmuka Anda eth0. Ganti eth0 pada contoh di bawah ini dengan nama antarmuka Anda.
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "
Menggunakan nama host: Ini akan memberi Anda inet yaitu IPAddress dari etho Anda. menggunakan -Aku akan memberi Anda nilai inet dari semua antarmuka di mana pun nilai ini ada.
hostname -i
sumber
Ini hanya mengembalikan alamat ip sistem Anda.
sumber
Saya akan Gunakan
Hostname -L
untuk mendapatkan hanya IP untuk digunakan sebagai variabel dalam skrip.sumber
hostname -i
atauhostname -I
?user@linux:~$ Hostname -L -bash: Hostname: command not found user@linux:~$
1. KapitalH
salah 2. Tidak seperti itu-L