Nếu kết nối của bạn là NAT, bạn có thể thấy địa chỉ IP bên ngoài của mình mà không cần yêu cầu web bên ngoài không?
Bất kỳ hệ điều hành nào (Windows, Linux, v.v.) đều ổn.
Nếu kết nối của bạn là NAT, bạn có thể thấy địa chỉ IP bên ngoài của mình mà không cần yêu cầu web bên ngoài không?
Bất kỳ hệ điều hành nào (Windows, Linux, v.v.) đều ổn.
Câu trả lời:
Nếu máy tính của bạn đứng sau NAT, bạn có thể thấy địa chỉ IP bên ngoài của bộ định tuyến, nhưng bạn cần quyền truy cập quản trị vào bộ định tuyến.
Bộ định tuyến biết địa chỉ IP bên ngoài của bạn, vì vậy bằng cách truy cập trang cấu hình của nó, bạn có thể tìm thấy địa chỉ IP đó. Cách này không yêu cầu bất kỳ công cụ chuyên dụng nào ngoại trừ trình duyệt Web.
Các giao thức khác yêu cầu một công cụ để nhận thông tin:
Theo thử nghiệm của người dùng @dirkt, tất cả các phương pháp chỉ hoạt động với IPv4 (ngoại trừ có thể cho PCP).
WANIPConn1/GetExternalIPAddress
và nó vừa trả về đúng địa chỉ.
Có một số cách làm việc với một số NAT nhưng không có gì đảm bảo hoạt động ở mọi nơi.
Tôi tin rằng uPnP, NAT-PMP và PCP (Universal Plug and Play, NAT Port Mapping Protocol và Port Control Protocol) đều có cách để hỏi một cổng NAT tuân thủ địa chỉ công khai là gì, nhưng không phải tất cả các NAT đều hỗ trợ các giao thức này. Hỗ trợ là phổ biến hơn trong các bộ định tuyến cổng nhà hơn là trong các giải pháp NAT cấp công ty hoặc nhà mạng.
Khi bạn thấy mình đứng sau NAT, cách chắc chắn duy nhất để xem địa chỉ IP công cộng nào đang dịch lưu lượng truy cập của bạn là gửi một số lưu lượng gửi đến một số máy chủ công cộng sẽ báo cáo lại, theo cách mà NAT sẽ không dịch, những gì NAT sẽ dịch, những gì địa chỉ giao thông của bạn dường như đến từ. Sử dụng dịch vụ dựa trên web là một cách, nhưng bạn cũng có thể thực hiện điều đó bằng cách giả sử sshd
SSH vào một phiên bản máy chủ đám mây và xem phiên bản SSH của bạn đến từ đâu.
Bạn có thể sử dụng một yêu cầu DNS mà tôi tin rằng sẽ không thuộc danh mục "yêu cầu web":
nslookup myip.opendns.com resolver1.opendns.com
dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns
. Tôi đã tìm thấy lệnh ở đây: Groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/ mẹo
nsslookup
Lệnh của bạn thất bại cho tôi. Tôi nhận được Server: resolver1.opendns.com
Address: 2620:119:35::35#53
** server can't find myip.opendns.com: NXDOMAIN
dig
vì nó không có trên Windows. Điểm hay về myaddr
Google mặc dù, tôi đã không biết điều đó! Tôi đoán nslookup
tương đương với Windows sẽ lànslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
nslookup
sử dụng phiên bản IP nào để vận chuyển, nhưng cách OpenDNS thực hiện điều này có nghĩa là bạn phải làm. Nếu không có điều đó, bạn phải dự đoán phiên bản IP nào nslookup
sẽ được sử dụng để vận chuyển và yêu cầu A hoặc AAAA tương ứng. Nếu bạn gặp khó khăn với nslookup
bạn, bạn có thể sử dụng một nhà cung cấp khác như Google. Tuy nhiên, bạn vẫn chỉ nhận được một phiên bản giao thức trong phản hồi và bạn không thể chọn phiên bản nào.
nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
và điều đó thực sự hoạt động. Nhưng nếu tôi có cả IPv4 và IPv6 sẽ không cho phép tôi chọn cái nào trong số chúng tôi sẽ thấy. Nhiều khả năng nó sẽ hiển thị cho tôi địa chỉ IPv6 và rất có thể tôi đang sử dụng địa chỉ này vì tôi muốn biết địa chỉ IPv4 của NAT. Để giải quyết vấn đề đó, người ta sẽ cần sử dụng một dịch vụ có tên chỉ có IPv4 và tên chỉ IPv6, điều đó cũng sẽ giải quyết vấn đề của NAT64.
Tôi muốn thêm một điểm vào câu trả lời đã có sẵn.
Nó cũng phụ thuộc vào độ phức tạp của mạng. Có thể máy tính của bạn được đặt trong một mạng có nhiều địa chỉ IP bên ngoài và bộ định tuyến ở đâu đó trên đường truyền lưu lượng truy cập ra Internet dựa trên một số tiêu chí: ví dụ: địa chỉ IP đích hoặc thời gian trong ngày (có thể là một kênh đường lên rẻ hơn vào ban đêm hoặc vì lý do khác).
Vì vậy, để hoàn thành, một khái niệm "địa chỉ IP bên ngoài" có thể yêu cầu xác định điểm đến mà địa chỉ của bạn đang ở bên ngoài.
Trong ví dụ dưới đây Router #2
có thể thực hiện NAT và gửi lưu lượng truy cập đến một trong hai đường lên và máy chủ nhận có thể thấy địa chỉ IP bên ngoài khác nhau cho Host
.
Hoặc có thể là một điểm đến nhất định (ví dụ host1.example.com
) luôn luôn định tuyến Uplink A
và máy chủ host2.example.com
luôn định tuyến qua Uplink B
. Vì vậy, các địa chỉ IP bên ngoài của bạn được nhìn thấy bởi các máy chủ đó sẽ khác nhau, cung cấp đó Uplink A
và Uplink B
là các ISP khác nhau.
Uplink A Uplink B
------------- -------------
| |
| |
| 192.168.1.1 192.168.50.50 |
| ----------- |
|---------------|Router #2|---------------|
-----------
| 192.168.100.1
|
| 192.168.100.2
-----------
|Router #1|
-----------
| 192.168.200.1
|
| 192.168.200.2
-----------
| Host |
-----------
Vì vậy, gửi lưu lượng ra sẽ cho phép để có được kết quả đáng tin cậy hơn.
Bạn có thể sử dụng DNS chứ không phải HTTP. Ví dụ: bạn có thể sử dụng:
dig +short TXT o-o.myaddr.l.google.com
Điều này sẽ hiển thị địa chỉ unicast của máy chủ DNS bạn đang sử dụng và nếu nó hỗ trợ EDNS, nó cũng sẽ hiển thị địa chỉ IP của bạn, mặc dù có thể bị cắt ngắn.
Để có được địa chỉ IP đầy đủ của bạn, bạn có thể bỏ qua máy chủ DNS cục bộ của mình và gửi yêu cầu trên trực tiếp đến ns {1,2,3,4} .google.com
dig +short TXT o-o.myaddr.l.google.com @ns3.google.com
Nếu bạn muốn xem địa chỉ IP của mình trong một phiên bản giao thức cụ thể, bạn có thể sử dụng -6
và -4
:
dig -6 +short TXT o-o.myaddr.l.google.com @ns3.google.com
dig -4 +short TXT o-o.myaddr.l.google.com @ns3.google.com
Bạn cũng có thể sử dụng OpenDNS nếu bạn thích. OpenDNS không sử dụng bản ghi TXT cho bản ghi này mà là bản ghi A và AAAA, vì vậy bạn phải chỉ định phiên bản giao thức nào bạn đang tìm kiếm:
dig -6 +short AAAA myip.opendns.com @resolver2.opendns.com
dig -4 +short A myip.opendns.com @resolver2.opendns.com
Lưu ý rằng nếu lưu lượng truy cập của bạn đi qua bản dịch giao thức, bạn có thể nhận được các kết quả khác nhau hoặc không có gì cả. Kiểm tra từ một máy phía sau NAT64 tôi có thể thấy địa chỉ IPv6 của mình bằng các lệnh trên nhưng không phải là địa chỉ IPv4 của NAT64.
Câu trả lời này dựa trên các nguồn 1 2 3 và một chút nghiên cứu của riêng tôi.
Web thường đề cập đến HTTP, nếu đó là ý nghĩa của câu hỏi của bạn, thì chẳng hạn, bạn có thể sử dụng STUN ( Bài viết Wikipedia ) viết tắt của "Tiện ích chuyển đổi phiên cho NAT".
Bây giờ khi nó được tô sáng trong một bình luận, bạn có thể có nhiều IP bên ngoài. Ngoài ra, khi các kết nối không dây đang trở nên phổ biến hơn (điều 4G), không thể là địa chỉ IP được báo cáo bởi bộ định tuyến của bạn sẽ không phải là địa chỉ công khai. Tôi thậm chí đã gặp kịch bản đó về các kết nối cáp quang ở một số quốc gia, nơi ISP sẽ cung cấp cho bộ định tuyến địa phương một IP riêng, sẽ được dịch 1: 1 sang IP công cộng sau khi rời khỏi mạng của họ.
Vì vậy, nếu câu hỏi của bạn là "tôi có thể tìm thấy IP công cộng của mình mà không gửi các gói ra khỏi mạng của mình không", bạn MIGHT trong ngữ cảnh của bạn, nhưng không có giải pháp bằng chứng 100%.