Tôi có thể tìm địa chỉ IP của mình bằng lệnh ifconfig hoặc hostname -i.
Nhưng làm cách nào để tìm IP công cộng của tôi?
(Tôi có một IP công cộng tĩnh nhưng tôi muốn tìm ra nó bằng lệnh unix)
Tôi có thể tìm địa chỉ IP của mình bằng lệnh ifconfig hoặc hostname -i.
Nhưng làm cách nào để tìm IP công cộng của tôi?
(Tôi có một IP công cộng tĩnh nhưng tôi muốn tìm ra nó bằng lệnh unix)
Câu trả lời:
curl ifconfig.me
curl ifconfig.me/ip
(chỉ cho ip)
curl ifconfig.me/all
(để biết thêm thông tin, cần có thời gian)
Để biết thêm các lệnh truy cập: http://ifconfig.me/#cli_wrap
curl http://checkip.amazonaws.com/
Bạn có thể yêu cầu myip.opendns.com
. từ OpenDNS. dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
. Hoặc trên Windows : nslookup myip.opendns.com resolver1.opendns.com
.
dig @208.67.222.220 myip.opendns.com +short
để có được trực tiếp ip mà không cần phải đi qua toàn bộ câu trả lời.
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Lưu ý rằng hiện tại chỉ hoạt động cho IPv4 (hiện tại không có bộ phân giải nào có vẻ như có IPv6, nhưng nếu bạn bỏ qua -4
và rõ ràng -t a
, thì bạn có nguy cơ bị hỏng trong tương lai (ngoại trừ Google txt
, có thể thực sự hoạt động cho IPv6 một ngày, nếu được Google kích hoạt đúng cách)).
Lưu ý rằng myip.opendns.com
chỉ có thể giải quyết thông qua resolver1.opendns.com
, chứ không phải với auth1.opendns.com
- vì vậy, dường như họ đang thực hiện một số vụ chiếm quyền điều khiển DNS và người đứng giữa tên miền của chính họ! Vì vậy, bạn không thể sử dụng nó để tìm IP của trình phân giải ngẫu nhiên, vì resolver1.opendns.com
không có thẩm quyền cho myip.opendns.com
.
Lưu ý rằng có o-o.myaddr.l.google.com
vẻ như cách tiếp cận linh hoạt nhất và trong tương lai; thậm chí còn tốt để kiểm tra xem trình phân giải DNS của bạn có hỗ trợ tiện ích mở rộng EDNS0 thử nghiệm cho mạng con máy khách hay không (mà rất ít trình phân giải có hỗ trợ):
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.
-4
hoặc -6
nếu bạn cần một phiên bản IP cụ thể.
Một anwser rất đơn giản nếu bạn có quyền truy cập internet là:
curl icanhazip.com
Hãy nhớ rằng, việc tin tưởng các nguồn của bên thứ ba cho IP của bạn có thể có vấn đề đặc biệt là nếu những gì bạn làm với dữ liệu đó có ý nghĩa đặc biệt.
Một cách đáng tin cậy hơn là chọn một máy chủ DNS đáng tin cậy (đáng tin cậy đang chạy DNSSEC) và truy vấn tên máy chủ của hộp với nó, cung cấp máy chủ DNS của bạn chứa các mục đó;
dig @trustworthysource.com +short `hostname`
Tôi đã viết một dịch vụ web đơn giản và nhanh chóng cho việc này.
curl ident.me
Bạn có thể yêu cầu IPv4 của bạn:
curl v4.ident.me
Hoặc IPv6:
curl v6.ident.me
Và API được ghi lại trên http://api.ident.me/
Một cách: http://www.whatismyip.com/
Nếu
sau đó bạn chỉ có thể phân tích đầu ra từ ifconfig cho các địa chỉ IP của các giao diện (phần "inet addr:") để lấy danh sách địa chỉ IP của tất cả các giao diện của bạn. Một địa chỉ IP không nằm trong phạm vi riêng tư (xem http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ) là địa chỉ IP công cộng của bạn.
Danh sách tương tự cũng có thể có được thông qua
ip addr show
mà có thể dễ dàng hơn để phân tích.
Nếu bạn không có kết nối internet trực tiếp (NAT, v.v.), không có cách nào để tìm địa chỉ IP công cộng của bạn mà không có sự trợ giúp bên ngoài (vì máy tính của bạn không biết điều đó). Sau đó, bạn sẽ phải làm điều đó như trong các câu trả lời khác.
Tôi đã thực hiện một cách tiếp cận khác bằng cách sử dụng giao thức STUN được thiết kế cho NAT Traversal. Nếu bạn sử dụng Ubuntu, bạn có thể chỉ cần cài đặt gói "choáng" bằng cách gõ:
sudo apt-get install stun
Gói cài đặt một máy chủ STUN mà bạn có thể không cần, nhưng nó cũng đi kèm với một máy khách thử nghiệm STUN mà tôi đã sử dụng để giải quyết vấn đề này. Bây giờ bạn có thể truy xuất IP công cộng của mình bằng một lệnh (không đơn giản như vậy):
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
Bây giờ, những gì nó làm là: stun liên lạc với máy chủ STUN công khai "stunerver.org" và nhận được câu trả lời với IP công cộng của bạn, phần còn lại của lệnh chỉ là để lọc IP từ đầu ra.
Một cách là, bạn có thể yêu cầu trang tại
http://www.biranchi.com/ip.php
nó trả về địa chỉ IP của hệ thống của bạn
text/html
phù hợp với những gì mà API giả trả về - chắc chắn không phải là XML hay JSON. text/plain
có thể, nhưng nó hoàn toàn có thể sử dụng như text/html
.
wget -q -O - http://wgetip.com/
Google hiện hiển thị địa chỉ IP công cộng của bạn: http://www.google.com/search?q=ip
User-Agent
chuỗi nào được cung cấp cho trang. Với Firefox, nó hoạt động; nhưng SeaMonkey với chuỗi "Firefox" bị vô hiệu hóa (thông qua "general.useragent.compatMode.firefox" được đặt thành false), nó đột nhiên không hoạt động. Hoàn toàn không có lý do tại sao Google kích hoạt rõ ràng những thứ như thế này chỉ dành cho Firefox thay vì bất kỳ Gecko nào, vì có nhiều trình duyệt máy tính để bàn khác dựa trên Gecko tương thích như nhau, bao gồm cả SeaMonkey.
Được rồi ... Tôi biết rằng đây là CÁCH sau khi thực tế và có lẽ thậm chí không đáng để đăng, nhưng đây là giải pháp làm việc của tôi.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
Đẹp và đơn giản.
hostname -I
(viết hoa 'i').
Cách đơn giản nhất là sử dụng http://ifconfig.me/ , như được đề xuất.
Trên trang này, bạn sẽ biết nên sử dụng lệnh nào cho thông tin bạn muốn lấy.
Đối với IP:
cuộn tròn ifconfig.mehoặc là
cuộn tròn ifconfig.me/ip
Đối với tên máy chủ công cộng:
cuộn tròn ifconfig.me/host
Đối với tất cả các thông tin trong một tệp XML:
curl ifconfig.me/all.xml
v.v ... chỉ cần xem http://ifconfig.me
Tôi đang làm điều này rất nhiều và từ rất nhiều thiết bị, vì vậy tôi đã tự tạo hai dịch vụ của mình trên một máy chủ:
Tệp php ở thư mục gốc của máy chủ web:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Cách sử dụng trên vỏ:
$ curl -4 mydomain.com
79.22.192.12
cũng làm việc với ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
Với netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Trên bộ định tuyến của Cisco:
router#more http://myserver.com/index.php
79.22.192.12
hack nhanh với một máy chủ telnet tùy chỉnh: xinetd spawning / usr / bin / env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
và sau đó telnet đến nó:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
hoạt động tương tự với bộ định tuyến:
router#telnet myserver.com
79.22.192.12
Bằng cách này, bạn có thể làm cho nó hoạt động trên mạng nội bộ của mình, nếu một số nat hoặc proxy có liên quan đến giao tiếp và bạn muốn biết IP nào bạn xuất hiện.
Nó không yêu cầu bất kỳ dịch vụ của bên thứ ba.
Để tránh phụ thuộc vào các nguồn bên ngoài, tôi sử dụng mong đợi, để telnet vào bộ định tuyến của mình và lấy địa chỉ IP của giao diện công cộng. Đây là một ví dụ mong đợi kịch bản:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
Sau đó tôi thực thi đoạn script trên như thế này để lấy ip công khai:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
Tất nhiên, điều này dựa trên giả định rằng tôi có quyền truy cập quản trị viên vào bộ định tuyến và bộ định tuyến dựa trên linux, với lệnh ifconfig có sẵn.
Bản sao của nhiều câu hỏi khác (do đó tôi bỏ phiếu -1).
Một giải pháp shell shell đơn giản có thể được tìm thấy ở đây:
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Hoạt động trên Linux, FreeBSD, SunOS và Apple Darwin (với một sửa đổi nhỏ).
Nếu điều bạn muốn là tìm địa chỉ IP bên ngoài trên bộ định tuyến của mình, bạn có thể hỏi chính bộ định tuyến đó cho địa chỉ wan của nó hoặc nhờ ai đó bên ngoài lấy nó cho bạn ..
đối với cách thủ công, bạn có thể duyệt bất kỳ trang web nào ở trên sẽ trả về ip của yêu cầu không liên quan.
Đối với một cách tự động, bạn có thể thử:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
sẽ cung cấp cho bạn dòng chứa địa chỉ IP trên phản hồi http, sau đó phân tích nó bằng sed, awk, v.v.
bạn chỉ có thể sử dụng shell để kiểm tra ip bên ngoài của mình, cũng sử dụng các nhà cung cấp bên ngoài
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
đầu ra
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' -m1
Tôi làm việc này. Nó chỉ cung cấp cho tôi IP mà không có sự tham gia của bên thứ ba ..
ip addr hiển thị | grep eth0 | grep inet | tr -s "" | cắt -f3 -d "" | cắt -f1 -d "/"
Đây là một giải pháp thay thế khác phụ thuộc vào các máy chủ mà doanh nghiệp của họ giải quyết xung quanh việc quản lý IP động thay vì các trang web "dịch vụ công cộng" có thể biến mất hoặc thay đổi định dạng.
1) Đăng ký máy chủ của bạn tại một trong nhiều dịch vụ dns động miễn phí (ví dụ: no-ip.com) Điều này sẽ cung cấp cho bạn một mục nhập DNS như xxx.no-ip.org.
2) Cài đặt công cụ cập nhật động của dịch vụ (báo cáo thay đổi IP thành dịch vụ).
Để lấy địa chỉ IP trong tập lệnh, chỉ cần làm:
$external_ip = `dig +short xxx.no-ip.org`
Tuyệt vời để sử dụng trong công việc định kỳ để kiểm tra xem IP động có thay đổi hay không và một số mục cấu hình cần được thay đổi.
Trên OS X, đây là hai giải pháp đơn giản để có cả IP riêng và IP công cộng (có mã thưởng nếu bạn sử dụng LaunchBar).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"