Lệnh Shell để lấy địa chỉ IP?


Câu trả lời:



25

Bạn có thể dùng:

/bin/ip addr

3
@opierce Bạn đã đánh dấu câu trả lời của mpbloch là chính xác, nhưng là một FYI, bạn nên sử dụng câu trả lời này, vì đây là một phần của bộ iproute2. ifconfighiện đang được thực hiện.
jwbensley

3
Bạn có thể làm cho nó ngắn hơn bằng cách chỉ chạy ip a.
gak 31/12/13

19

Nếu bạn có một địa chỉ nội bộ đang sử dụng, hãy kiểm tra

curl http://myip.dnsomatic.com

có thể là một ý tưởng tốt trên vỏ unix.
Hoặc, chỉ cần tải URL đó vào trình duyệt của bạn.


Nếu bạn nhận được một câu trả lời khác từ "ifconfig -a " kết quả,
các ifconfigcho địa chỉ nội bộ của bạn - đó có thể sẽ không làm việc từ bên ngoài.


Ngay cả khi tất cả có vẻ ổn, bạn có thể có một tường lửa sẽ không cho phép đến kết nối ssh .
Tại thời điểm nào bạn nên thử cổng quan tâm từ trình duyệt trên máy tại,

http://www.canyouseeme.org/

Điều đó sẽ xác nhận kết nối thông qua,

  • địa chỉ IP bên ngoài (hiển thị nó cho bạn trên trang đó)
  • NAT, cảng chuyển tiếp
  • Tường lửa

Đúng, nhưng nếu đó là trường hợp, có lẽ không có quy tắc Chuyển tiếp NAT / Cổng nào phù hợp với ssh với bất kỳ IP nội bộ nào.
Kyle Brandt

@Kyle, có thể được thêm ...
nik

3
+1 chocurl http://myip.dnsomatic.com
JatSing

Tương tự như vậy, cũng cócurl ifconfig.me
jwbensley

19

/bin/hostname -i


3
Trong trường hợp này tôi sẽ đề nghị sử dụng hostname --all-ip-addresses. Hiển thị tất cả các địa chỉ mạng của máy chủ. Tùy chọn này liệt kê tất cả các địa chỉ được cấu hình trên tất cả các giao diện mạng. Giao diện loopback và địa chỉ liên kết cục bộ IPv6 bị bỏ qua. Trái với tùy chọn -i, tùy chọn này không phụ thuộc vào độ phân giải tên. Không đưa ra bất kỳ giả định nào về thứ tự đầu ra.
lrkwz

5
Thay thế ngắn hơn cho nhận xét của @ lrkwz/bin/hostname -I
hanxue

Cảm ơn @hanxue - đây phải là một câu trả lời của riêng nó - lệnh ngắn nhất với đầu ra sạch nhất - đúng như những gì tôi đang tìm kiếm! Theo kinh nghiệm của tôi (Ubuntu), /bin/hostname -ichỉ cần cho 127.0.1.1, đó là vô ích.
Roger Dueck


9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Nếu bạn cần địa chỉ nội bộ của bạn nối thêm giao diện của bạn sau ifconfig, vd

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

+1, đây chính xác là những gì tôi cần để giải quyết vấn đề. Thắng cho một lót!
J. Polfer

+1 Không có đầu -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice

Cảm ơn, nó hoạt động trên Debian nhưng trên OS X thì nó không hoạt động, trả lại một số rác. Sẽ thật tuyệt nếu chúng ta có thể tạo ra một dòng hoạt động trên cả hai. Đây là đầu ra của ifconfig trên OS X: gist.github.com/ssbarnea/5814657
sorin


3

Nếu bạn cần tìm ra địa chỉ IP của bộ định tuyến, bạn có thể chạy lệnh này.

đào + ngắn myip.opendns.com @ 208,67.222.222 @ 208,67.220.220

Nếu bạn đang sử dụng OpenDNS cho máy chủ dns của mình, bạn có thể rút ngắn nó thành:

đào + ngắn myip.opendns.com

Bạn cũng có thể sử dụng lệnh này.

cuộn tròn http://myip.dnsomatic.com

3

Nếu bạn có nhiều giao diện, có thể hữu ích để chỉ định giao diện nào bạn muốn IP. nếu bạn muốn địa chỉ IPV4 của giao diện 'eth0':

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

nếu bạn muốn địa chỉ IPV6 của giao diện 'eth0':

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

nếu bạn muốn tìm kiếm IP giữa hai giao diện phổ biến của máy tính xách tay, wlan0 và 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

3

Chỉ cần cuộn tròn trang này :

$ curl wtfismyip.com/text


Và làm thế nào chính xác là vượt trội so với các dịch vụ tương tự đã được đề cập trong những năm này?
Esa Jokinen

2

Đây cũng là một dòng hoạt động trên Linux và OS X và nó sẽ trả về địa chỉ đầu tiên không phải là cục bộ:

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

Gửi tín dụng đến /programming//a/13322549/99834



1

Cách đơn giản nhất để đi về nó có lẽ là

ifconfig eth0

giả sử máy có một địa chỉ IP duy nhất trên giao diện có dây mặc định - bạn có thể cần

ifconfig wlan0

nếu nó trên WiFi.


1
ip address show scope link

Nó sẽ cho bạn thấy địa chỉ IP của cuộc sống - có liên kết - giao diện. Nhưng nó không phải là một lệnh bash. Bash không có khả năng biết về IP và mạng.


1

Điều tôi hiểu là bạn muốn kết nối một máy ubfox từ xa có ip động. Truy cập trang web dyndns.org và mở một tài khoản miễn phí. Sau đó, trên máy từ xa, bạn cần cài đặt một công cụ ip động.

sudo aptitude install dyndns-client

để bạn có thể ssh máy từ xa thông qua

ssh username@yourdynamicnamealias.dyndns.org

Vì vậy, sau khi cấu hình, bạn sẽ không bao giờ cần địa chỉ ip máy từ xa.


Đây là phương pháp ưa thích của tôi để xử lý các IP động. dyndns.org là một dịch vụ tuyệt vời, miễn phí.
John Barrett

1

Đây là những gì tôi đang sử dụng:

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

1

nếu bạn chỉ cần một IP duy nhất của giao diện đã cho, bạn có thể làm:

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


0

Nếu bạn đang tìm kiếm một địa chỉ IP công cộng của hộp , bạn có thể sử dụng như sau:

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

Bạn có thể sử dụng dig(1)các tùy chọn như -4hoặc -6đặc biệt tìm kiếm địa chỉ IPv4 hoặc IPv6; Google sẽ cung cấp một câu trả lời trong một bản ghi TXTloại, trong đó sẽ có các trích dẫn xung quanh nó khi được trình bày bởi dig; nếu sau đó bạn muốn sử dụng biến với các tiện ích như traceroute, bạn phải sử dụng cái gì đó như tr (1) để xóa các trích dẫn đã nói.

Các tùy chọn khác bao gồm whoami.akamai.netmyip.opendns.com, câu trả lời với AAAAAcác bản ghi (thay vì TXTnhư trong ví dụ trên từ Google), vì vậy, chúng không yêu cầu xóa các trích dẫn:

  • 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

Đây là tập lệnh mẫu sử dụng tất cả các tùy chọn ở trên để đặt các biến:

#!/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}"

Nếu bạn đang tìm kiếm một địa chỉ IP riêng hoặc cho một tập hợp tất cả các địa chỉ IP được gán cho hộp, bạn có thể sử dụng một số kết hợp ifconfig(trên BSD và GNU / Linux), ip addr(trên GNU / Linux), hostname(tùy chọn -i-Ibật GNU / Linux) và netstatđể xem những gì đang xảy ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.