หากการเชื่อมต่อของคุณเป็น NAT'ed เป็นไปได้ไหมที่จะเห็นที่อยู่ IP ภายนอกของคุณโดยไม่ต้องทำการร้องขอเว็บขาออก
ระบบปฏิบัติการใด ๆ (Windows, Linux, ฯลฯ ) ก็ใช้ได้
หากการเชื่อมต่อของคุณเป็น NAT'ed เป็นไปได้ไหมที่จะเห็นที่อยู่ IP ภายนอกของคุณโดยไม่ต้องทำการร้องขอเว็บขาออก
ระบบปฏิบัติการใด ๆ (Windows, Linux, ฯลฯ ) ก็ใช้ได้
คำตอบ:
หากคอมพิวเตอร์ของคุณอยู่หลัง NAT มันเป็นไปได้ที่คุณจะเห็นที่อยู่ IP ภายนอกของเราเตอร์ของคุณ แต่คุณต้องใช้สิทธิ์ของผู้ดูแลระบบในการเข้าถึงเราเตอร์
เราเตอร์รู้ที่อยู่ IP ภายนอกของคุณดังนั้นเมื่อเข้าถึงหน้าการกำหนดค่าคุณจะพบที่อยู่ IP นั้นได้ วิธีนี้ไม่ต้องการเครื่องมือพิเศษใด ๆ ยกเว้นเว็บเบราว์เซอร์
โปรโตคอลอื่น ๆ ที่ต้องการเครื่องมือในการรับข้อมูล:
ดังที่ทดสอบโดย user @dirkt วิธีการทั้งหมดใช้ได้กับ IPv4 เท่านั้น (ยกเว้นสำหรับ PCP)
WANIPConn1/GetExternalIPAddress
และมันก็ส่งคืนที่อยู่ที่ถูกต้องได้สำเร็จ
มีสองสามวิธีที่ทำงานกับ NATs บางตัว แต่ไม่มีอะไรรับประกันได้ว่าจะทำงานได้ทุกที่
ฉันเชื่อว่า uPnP, NAT-PMP และ PCP (Universal Plug And Play, NAT Port Mapping Protocol และ Port Control Protocol) ทุกคนมีวิธีที่จะถาม NAT NAT ที่สอดคล้องกับสิ่งที่ที่อยู่สาธารณะ แต่ไม่ใช่ NATs ทั้งหมดที่สนับสนุนโปรโตคอลเหล่านี้ การสนับสนุนเป็นเรื่องปกติในเราเตอร์เกตเวย์บ้านมากกว่าในโซลูชัน NAT ขององค์กรหรือผู้ให้บริการเครือข่าย
เมื่อคุณพบว่าตัวเองอยู่หลัง NAT วิธีเดียวที่จะดูว่าที่อยู่ IP สาธารณะใดที่กำลังแปลการรับส่งข้อมูลของคุณคือการส่งทราฟฟิกขาออกไปยังโฮสต์สาธารณะที่จะรายงานกลับในทางที่ NAT จะไม่แปล ที่อยู่การรับส่งข้อมูลของคุณดูเหมือนจะมาจาก การใช้บริการบนเว็บเป็นวิธีหนึ่ง แต่คุณสามารถทำได้โดยพูด SSHing เป็นอินสแตนซ์เซิร์ฟเวอร์คลาวด์และดูsshd
ว่าเซสชัน SSH ของคุณมาจากที่ใด
คุณสามารถใช้คำขอ DNS ซึ่งฉันเชื่อว่าจะไม่อยู่ในหมวดหมู่ของ "คำขอเว็บ":
nslookup myip.opendns.com resolver1.opendns.com
dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns
นอกจากนี้คุณยังสามารถใช้ ฉันพบคำสั่งที่นี่: groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…
nsslookup
คำสั่งของคุณล้มเหลวสำหรับฉัน ฉันได้รับ Server: resolver1.opendns.com
Address: 2620:119:35::35#53
** server can't find myip.opendns.com: NXDOMAIN
dig
เพราะมันไม่ได้อยู่ใน Windows ข้อดีmyaddr
ของ Google ก็คือฉันไม่ทราบเลย! ฉันเดาว่า Windows nslookup
เทียบเท่าจะเป็นnslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
nslookup
ว่าจะใช้เวอร์ชั่นใดของ IP เพื่อการขนส่ง แต่วิธีการของ OpenDNS นั้นหมายความว่าคุณต้องทำ หากไม่มีคุณจะต้องคาดเดาว่า IP เวอร์ชั่นnslookup
ใดที่จะใช้สำหรับการขนส่งและขอ A หรือ AAAA ตามลำดับ หากคุณติดอยู่กับnslookup
คุณสามารถใช้ผู้ให้บริการอื่นเช่น Google อย่างไรก็ตามคุณยังคงได้รับรุ่นโปรโตคอลเพียงหนึ่งรุ่นในการตอบกลับและคุณไม่สามารถเลือกได้
nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
และใช้งานได้จริง แต่ถ้าฉันมีทั้ง IPv4 และ IPv6 ที่จะไม่ให้ฉันเลือกว่าจะดูอะไร เป็นไปได้มากว่ามันจะแสดงที่อยู่ IPv6 ให้ฉันและมีโอกาสมากที่ฉันจะใช้เพราะฉันต้องการทราบที่อยู่ IPv4 ของ NAT หากต้องการหลีกเลี่ยงสิ่งนั้นจะต้องใช้บริการที่มีชื่อ IPv4 เท่านั้นและชื่อ IPv6 เท่านั้นซึ่งจะแก้ไขปัญหาของ NAT64 ด้วย
ฉันต้องการเพิ่มจุดหนึ่งคำตอบที่มีอยู่แล้ว
นอกจากนี้ยังขึ้นอยู่กับความซับซ้อนของเครือข่าย อาจเป็นไปได้ว่าคอมพิวเตอร์ของคุณอยู่ในเครือข่ายที่มีที่อยู่ IP ภายนอกหลายแห่งและเราเตอร์บางแห่งที่อยู่ในแถวนั้นส่งสัญญาณการรับส่งข้อมูลไปยังอินเทอร์เน็ตตามเกณฑ์บางประการ: ตัวอย่างเช่นที่อยู่ IP ปลายทางหรือช่วงเวลาของวัน เป็นอัปลิงค์ช่องหนึ่งราคาถูกกว่าในเวลากลางคืนหรือด้วยเหตุผลอื่น
ดังนั้นเพื่อให้เสร็จสมบูรณ์แนวคิดเกี่ยวกับ "ที่อยู่ IP ภายนอก" อาจจำเป็นต้องกำหนดจุดปลายทางที่ที่อยู่ของคุณเป็นภายนอก
ในตัวอย่างด้านล่างRouter #2
สามารถดำเนินการ NAT และส่งเข้าชม uplinks ใดอย่างหนึ่งและโฮสต์ที่ได้รับจะได้เห็นที่แตกต่างกันอยู่ IP Host
ภายนอกสำหรับ
หรืออาจเป็นได้ว่าปลายทาง (ตัวอย่างเช่นhost1.example.com
) กำหนดเส้นทางผ่านเสมอUplink A
และโฮสต์host2.example.com
จะกำหนดเส้นทางผ่านUplink B
เสมอ ดังนั้นที่อยู่ IP ภายนอกของคุณที่เห็นโดยโฮสต์เหล่านั้นจะแตกต่างกันโดยให้ข้อมูลนั้นUplink A
และUplink B
เป็น ISP ที่แตกต่างกัน
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 |
-----------
ดังนั้นการส่งทราฟฟิกจะช่วยให้ได้ผลลัพธ์ที่น่าเชื่อถือมากขึ้น
คุณสามารถใช้ DNS แทน HTTP ตัวอย่างเช่นคุณสามารถใช้:
dig +short TXT o-o.myaddr.l.google.com
นี่จะแสดงที่อยู่ unicast ของเซิร์ฟเวอร์ DNS ที่คุณใช้และหากรองรับ EDNS ก็จะแสดงที่อยู่ IP ของคุณด้วยแม้ว่าจะถูกตัดทอน
ในการรับที่อยู่ IP แบบเต็มคุณสามารถบายพาสเซิร์ฟเวอร์ DNS ในพื้นที่ของคุณและส่งคำขอข้างต้นไปที่ ns {1,2,3,4} .google.com โดยตรง
dig +short TXT o-o.myaddr.l.google.com @ns3.google.com
หากคุณต้องการดูที่อยู่ IP ของคุณในรุ่นโปรโตคอลที่ระบุคุณสามารถใช้-6
และ-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
คุณยังสามารถใช้ OpenDNS ได้หากต้องการ OpenDNS ไม่ได้ใช้ระเบียน TXT สำหรับรายการนี้ แต่เป็นระเบียน A และ AAAA ดังนั้นคุณต้องระบุเวอร์ชันโปรโตคอลที่คุณต้องการ:
dig -6 +short AAAA myip.opendns.com @resolver2.opendns.com
dig -4 +short A myip.opendns.com @resolver2.opendns.com
โปรดสังเกตว่าหากปริมาณการใช้งานของคุณผ่านการแปลโปรโตคอลคุณอาจได้ผลลัพธ์ที่แตกต่างหรือไม่มีเลย การทดสอบจากเครื่องที่อยู่หลัง NAT64 ฉันสามารถเห็นที่อยู่ IPv6 ของฉันด้วยคำสั่งข้างต้น แต่ไม่ใช่ที่อยู่ IPv4 ของ NAT64
คำตอบนี้ขึ้นอยู่กับแหล่งข้อมูลเหล่านี้1 2 3และการวิจัยของฉันเองเล็กน้อย
โดยทั่วไปแล้วเว็บอ้างอิงถึง HTTP หากเป็นความหมายของคำถามของคุณตัวอย่างเช่นคุณสามารถใช้ STUN ( Wikipedia Article ) ซึ่งย่อมาจาก "Session Traversal Utilities for NAT"
ตอนนี้เนื่องจากถูกเน้นในความคิดเห็นคุณอาจมี IP ภายนอกหลายรายการ เช่นเดียวกับการเชื่อมต่อไร้สายที่กลายเป็นเรื่องธรรมดา (สิ่ง 4G) มันเป็นไปไม่ได้ที่ที่อยู่ IP ที่รายงานโดยเราเตอร์ของคุณจะไม่เปิดเผยต่อสาธารณะ ฉันได้พบกับสถานการณ์นั้นเกี่ยวกับการเชื่อมต่อใยแก้วนำแสงในบางประเทศที่ ISP จะให้ IP ส่วนตัวเราเตอร์ท้องถิ่นที่จะได้รับ 1: 1 แปลเป็น IP สาธารณะในภายหลังเมื่อออกจากเครือข่าย
ดังนั้นหากคำถามของคุณคือ "ฉันจะหา IP สาธารณะของฉันได้โดยไม่ต้องส่งแพ็กเก็ตออกจากเครือข่ายของฉัน" คุณอาจจะอยู่ในบริบทของคุณ แต่ไม่มีวิธีพิสูจน์ 100%