Saya ingin mengetahui layanan jaringan yang tersedia (mis. Ethernet atau Wi-Fi ) yang saat ini aktif. Dalam tangkapan layar ini dari Network Preferences, Anda dapat melihat Wi-Fi itu saat ini aktif (titik hijau):
Bagaimana saya bisa mendapatkan informasi itu dari baris perintah?
The networksetup
perintah memungkinkan saya untuk daftar layanan jaringan yang tersedia:
$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Ethernet
FireWire
Wi-Fi
Itu juga dapat menampilkan beberapa detail pada layanan, seperti nama perangkat:
$ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)
(2) FireWire
(Hardware Port: FireWire, Device: fw0)
(3) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)
Sayangnya, info layanan mana yang aktif (titik hijau dari tangkapan layar) tidak tersedia di info ini. Apakah ada perintah lain yang bisa saya gunakan untuk mendapatkan informasi ini?
status
bidang yang memilikiactive
atauinactive
sebagai nilai.ifconfig | grep $(networksetup -listnetworkserviceorder | grep 'Ethernet, Device' | sed -E "s/.*(en[0-9]).*/\1/")
. Kemudian saya dapat beralih lokasi berdasarkan hal di atas kosong.Gabungkan semuanya, saya menulis sebuah skrip untuk menyelesaikan tugas ini:
Script pertama mendapatkan daftar layanan dari
networksetup
perintah, lalu periksa apakah setiap layanan dalam status aktif dariifconfig
.Beri nama skrip
networkservice.sh
misalnya, kemudian jalankan untuk mendapatkan layanan jaringan saat ini.sumber
tac
untuk beralih melalui antarmuka dalam urutan terbalik karena saya sering memiliki WiFi yang terhubung serta adaptor ethernet USB (yang merupakan perangkat yang disukai dalam Jaringan). Dalam hal ini saya ingin alat aktif yang paling disukai dicetak:services=$(networksetup -listnetworkserviceorder | grep 'Hardware Port' | tac)
networksetup -listnetworkserviceorder
sudah menampilkan "perangkat yang paling disukai" pertama ...tac
agar nanti (tidak disukai) layanan tidak akan menimpa$currentservice
. Seharusnya lebih jelas dalam komentar asli itu.Itu
scutil --dns
perintah memberikan semua informasi jaringan routing Anda harus memetakan label antarmuka perangkat keras untuk rute jaringan.Sedikit
awk
dangrep
dapat menyesuaikannya jika Anda perlu skrip informasi atau pare itu. Mulailah dengan mencengkeram "if_index" jika Anda penasaran.sumber
Hanya memetikan orang lain tersandung di ini seperti yang saya lakukan kode di bawah ini mungkin lebih dari apa yang Anda cari.
Ini untuk memperluas pada Jawaban PeterVP
Juga dapat dilihat di https://www.kittell.net/code/mac-os-x-get-network-information/
sumber
set public (dig +short myip.opendns.com @resolver1.opendns.com)
Alasan saya untuk ini adalah bahwa server dns (seperti opendn) lebih kecil kemungkinannya turun dari situs web dan lebih cepat. Dan saya menghapus pernyataan tidur. Tidak perlu menunggu balasan server-dns. Waktu eksekusi untuk skrip saya 177 ms. Anda membutuhkan 5,237 detik, tetapi tentu saja lebih. Masih perbedaan besar.Saya tidak akan berpura-pura memiliki jawaban untuk pertanyaan ini diurutkan, tetapi ini tetapi ini mungkin membantu.
Anda dapat bertanya bagaimana saat ini akan mengarahkan paket ke sesuatu:
Dan kemudian Anda dapat bertanya apa "Layanan Jaringan" yang mengelola antarmuka itu:
Tapi jujur, saya ragu bahwa "Layanan Jaringan" adalah 1-1 dengan port perangkat keras. Dan beberapa antarmuka, tun0 misalnya, tidak memiliki "Layanan Jaringan". Setidaknya kadang-kadang tidak.
sumber
Diambil dari Cari Detail Koneksi Sejarah Wi-Fi dari Command Line of Mac OS X | OSXDaily :
Anda mendapatkan banyak info tentang riwayat koneksi, termasuk detail untuk koneksi saat ini.
Tidak sempurna tetapi Anda mendapatkan info yang Anda cari - dan banyak info tambahan lainnya!
sumber
Ini skrip kulit ikan yang saya tulis:
Ini menunjukkan semua antarmuka jaringan yang aktif dan data yang relevan.
Komentari apa yang tidak Anda inginkan / butuhkan
sumber
echo_italic
fungsi shell daripada membungkus semua iniecho
dalamset_color
panggilan.set_color
perintah bisa dihapus. Mereka hanya 'dekoratif'.set_color
Perintah yang dihapus & memasukkan variabel ke dalam pernyataan gemaTidak yakin apakah ini membantu siapa pun, tetapi karena saya mengutak-atik pertanyaan yang sama, saya datang ke solusi ini:
ifconfig | grep flags=8863 | grep -v bridge
Outputnya akan terlihat seperti ini, dan hanya mencantumkan port ethernet dan wifi yang sedang digunakan:
Jika Anda juga ingin melihat alamat IPv4 yang ditetapkan:
ifconfig | grep 'flags=8863\|inet ' | grep -v 'bridge\|127.0.0.1'
Yang menghasilkan sesuatu seperti ini;
Alternatif lain:
scutil --nwi
Yang menunjukkan perangkat jaringan online, baris terakhir sebenarnya menunjukkan antarmuka jaringan yang sedang aktif:
Pemrosesan lebih lanjut, jika perlu, terserah Anda. :-)
catatan:
Pikiran Anda bahwa saya bukan ahli di bendera (8863). Anda dapat menemukan detail flag di file header if.h - Spotlight adalah teman Anda dalam menemukan "if.h". Saya menemukan milik saya misalnya di sini:
yang akan menunjukkan kepada Anda apa arti bendera (ingat: heksadesimal);
sumber