Tôi biết bạn có thể làm ifconfig | grep inet
, nhưng điều đó cho bạn thấy một số địa chỉ IPv4. Làm cách nào để có được cái cụ thể cho SSHing et al?
Tôi biết bạn có thể làm ifconfig | grep inet
, nhưng điều đó cho bạn thấy một số địa chỉ IPv4. Làm cách nào để có được cái cụ thể cho SSHing et al?
Câu trả lời:
Sử dụng ipconfig getifaddr en1
cho không dây, hoặc ipconfig getifaddr en0
cho ethernet.
Cập nhật :
ipconfig getifaddr en0
được mặc định cho giao diện wifi.
ifconfig
hiển thị tất cả các giao diện và IP của chúng
curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
Sau đây làm việc cho tôi vào ngày 10.8 và ngày 10.10 Yosemite.
ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'
Nếu bạn thấy những điều trên cung cấp cho bạn nhiều hơn một câu trả lời, hãy lưu câu trả lời sau vào tập lệnh và thay vào đó hãy chạy nó
#!/usr/bin/env bash
dumpIpForInterface()
{
IT=$(ifconfig "$1")
if [[ "$IT" != *"status: active"* ]]; then
return
fi
if [[ "$IT" != *" broadcast "* ]]; then
return
fi
echo "$IT" | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
}
main()
{
# snagged from here: https://superuser.com/a/627581/38941
DEFAULT_ROUTE=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
if [ -n "$DEFAULT_ROUTE" ]; then
dumpIpForInterface "$DEFAULT_ROUTE"
else
for i in $(ifconfig -s | awk '{print $1}' | awk '{if(NR>1)print}')
do
if [[ $i != *"vboxnet"* ]]; then
dumpIpForInterface "$i"
fi
done
fi
}
main
Chỉ cần gõ curl ifconfig.me
vào thiết bị đầu cuối.
ipconfig getifaddr en0
dành cho IP cục bộ.
Bạn có thể làm như sau:
Loại ifconfig
hoặc ifconfig -a
. Lệnh này hiển thị cho bạn danh sách các giao diện cùng với địa chỉ IP và MAC của chúng (chỉ giao diện sau nếu có). Bạn cũng có thể chỉ nhập ifconfig en0
hoặc ifconfig en1
cấu hình của một giao diện cụ thể (như ai đó đã nói trong câu trả lời của họ, en0 thường là Ethernet có dây trong khi en1 là giao diện WiFi).
Thay vào đó, netstat -i
sẽ liệt kê tất cả các giao diện và sẽ hiển thị cho bạn các địa chỉ IP bạn đã gán cho từng giao diện đó.
Thông thường, khi bạn có SSH daemon chạy trên một hộp, nó sẽ lắng nghe trên tất cả các giao diện có sẵn, tức là. bạn có thể sử dụng bất kỳ địa chỉ IP nào được cấu hình trên máy của mình để kết nối với máy đó thông qua SSH (điều này, rõ ràng, tuân theo các quy tắc Tường lửa). Nếu bạn theo sau những gì HĐH gọi là giao diện Chính và địa chỉ IP chính, bạn có thể sử dụng scutil
lệnh như sau:
MacBook:~ scutil
> show State:/Network/Global/IPv4
<dictionary> {
PrimaryInterface : en0
PrimaryService : C0550F84-5C07-484F-8D62-C8B90DC977D8
Router : 10.103.4.1
}
> show State:/Network/Interface/en0/IPv4
<dictionary> {
Addresses : <array> {
0 : 10.103.4.234
}
BroadcastAddresses : <array> {
0 : 10.103.4.255
}
SubnetMasks : <array> {
0 : 255.255.255.0
}
}
Xin lưu ý rằng, ở trên, mặc dù là một dòng lệnh, cũng tương tác (vì vậy bạn chạy scutil
và sau đó nhập các lệnh của riêng nó vào nó). Lệnh đầu tiên show
cho bạn biết tên của giao diện chính cho HĐH (tức là đây sẽ là giao diện đứng đầu danh sách trong cửa sổ Tùy chọn hệ thống / Tùy chọn mạng của bạn), cũng như địa chỉ IP của bộ định tuyến mặc định của bạn. Lệnh thứ hai show
lấy State:/Network/Interface/<ifname>/IPv4
đối số (trong trường hợp này en0
) và cung cấp cho bạn các địa chỉ IP được gán cho nó. Bạn đang tìm địa chỉ trong mảng Địa chỉ, hai mục còn lại là địa chỉ quảng bá và netmasks.
Hy vọng rằng sẽ giúp, nhưng nếu bất cứ điều gì không rõ ràng, cho tôi biết.
echo "show State:/Network/Interface/$(echo 'show State:/Network/Global/IPv4' | scutil | grep 'PrimaryInterface ' | sed 's/ PrimaryInterface : //')/IPv4" | scutil | pcregrep -Mo1 " Addresses : <array> {\n 0 : ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"
Để lấy địa chỉ IP của máy tính của bạn đối diện với Internet, đây là một biên nhận làm việc:
if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'`
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'
Nó sẽ hoạt động ngay cả khi bạn có nhiều giao diện hoạt động, ngay cả khi bạn có giao diện mà bạn không biết cái nào thực sự là cổng mặc định.
192.168.0.*)
netstat -nr | grep default
?
Chỉ để ghi lại, bạn có thể tạo một tập lệnh bash với nội dung sau cung cấp cho bạn địa chỉ IP bên ngoài của bạn
#!/bin/bash
wget -qO - http://ipecho.net/plain; echo
wget
đây không phải là một phần của macOS và cần được cài đặt từ nguồn không phải của Apple.
curl -s http://ipecho.net/plain; echo