วิธีรับ IP สาธารณะของคุณใน Linux Bash Script

เผยแพร่แล้ว: 2022-11-12
แล็ปท็อปบนพื้นหลังสีน้ำเงินแสดงพรอมต์คำสั่ง Linux
fatmawati achmad zaenuri/Shutterstock.com
คุณสามารถรับ IP ภายนอกได้จากเว็บไซต์ด้วยคำสั่ง curl เช่น "curl -s ifconfig.me" อย่างไรก็ตาม เว็บไซต์สามารถเปลี่ยนแปลงได้ สำหรับคำตอบที่เชื่อถือได้มากขึ้น ให้ใช้คำสั่ง dig แทนเช่น "dig @resolver1.opendns.com myip.opendns.com +short" เพื่อรับ IP ของคุณจากเซิร์ฟเวอร์ DNS

คุณจะต้องใช้ที่อยู่ IP ภายนอกหากต้องการเชื่อมต่อกับคอมพิวเตอร์จากระยะไกล การค้นหาด้วยตนเองเป็นเรื่องง่าย แต่ต่อไปนี้คือวิธีค้นหาจากภายในสคริปต์ Linux

ที่อยู่ IP ภายในและภายนอก

ที่อยู่อินเทอร์เน็ตโปรโตคอลใช้เพื่อระบุอุปกรณ์บนเครือข่าย เป็นป้ายกำกับเฉพาะบนเครือข่ายที่กำหนดให้กับอุปกรณ์เครื่องเดียว หากอุปกรณ์อื่นต้องการส่งข้อมูลไปยังอุปกรณ์นั้น ก็สามารถทำได้โดยใช้ที่อยู่ IP

ที่อยู่ IP ทำงานอย่างไร
ที่เกี่ยวข้อง ที่อยู่ IP ทำงานอย่างไร

โมเด็มบรอดแบนด์ของคุณมีเราเตอร์เครือข่ายในตัวซึ่งกำหนดทิศทางการรับส่งข้อมูลเครือข่ายทั่วเครือข่ายจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง นอกจากนี้ยังเป็นหน่วยงานท้องถิ่นที่จัดสรรที่อยู่ IP ให้กับอุปกรณ์เมื่อเข้าร่วมเครือข่าย นอกจากนี้ยังรักษาตารางชื่อเครือข่ายและที่อยู่ IP วิธีนี้ทำให้คุณสามารถตั้งชื่อที่สื่อความหมายให้กับคอมพิวเตอร์ในเครือข่ายของคุณได้ เพราะสำหรับมนุษย์ ชื่อนั้นใช้งานได้ง่ายกว่ารายการตัวเลข

อุปกรณ์บน อินเทอร์เน็ต ยังมีที่อยู่ IP บางแห่งก็มีชื่อเหมือนกัน เช่น เว็บไซต์ ผู้ให้บริการชื่อโดเมนจะค้นหาชื่อโดเมนของเว็บไซต์และสลับเป็นที่อยู่ IP โดยอัตโนมัติ

โมเด็มบรอดแบนด์ของคุณจะได้รับการติดต่อทางอินเทอร์เน็ตหรือที่อยู่ IP ภายนอก โดยผู้ให้บริการอินเทอร์เน็ต (ISP) ของคุณ ไม่ว่าคุณจะมีอุปกรณ์จำนวนเท่าใดในบ้านที่เชื่อมต่อกับอินเทอร์เน็ต การรับส่งข้อมูลที่รวมกันทั้งหมดจะออกไปผ่านที่อยู่ IP เดียวนั้น

หากคุณอยู่นอกเมืองและต้องการเชื่อมต่อกับบริการที่คุณใช้บนคอมพิวเตอร์เครื่องใดเครื่องหนึ่งในบ้าน คุณจะต้องใช้ที่อยู่ IP ภายนอกเพื่อดำเนินการดังกล่าว เราเตอร์ของคุณต้องได้รับการตั้งค่าเพื่อกำหนดเส้นทางคำขอเชื่อมต่อของคุณไปยังอุปกรณ์ที่เหมาะสมภายในบ้านของคุณ

เว้นแต่คุณจะจ่ายเพิ่มเล็กน้อยให้กับ ISP ของคุณในแต่ละเดือนสำหรับที่อยู่ IP แบบคง ที่ ที่อยู่ IP ภายนอกของคุณอาจเปลี่ยนแปลงเป็นครั้งคราว การรีบูตโมเด็มบรอดแบนด์ของคุณอาจส่งผลให้คุณได้รับที่อยู่ IP ภายนอกที่แตกต่างกัน ดังนั้น หากคุณต้องการทราบที่อยู่ IP ภายนอก คุณไม่สามารถตรวจสอบเพียงครั้งเดียวและจัดเก็บได้ คุณจะต้องพิจารณาเป็นระยะว่ามันคืออะไร

ค้นหาที่อยู่ IP ภายนอกของคุณ

การค้นหาที่อยู่ IP ภายนอกของคุณหมายถึงการพูดคุยกับบางสิ่งที่อยู่นอกเครือข่ายของคุณ กล่าวอีกนัยหนึ่งคือการเข้าถึงบางสิ่งบนอินเทอร์เน็ตที่สามารถให้ข้อมูลที่เราต้องการได้ เราต้องมองเข้าไปในความว่างเปล่าและดูว่าอะไรกำลังมองกลับมาที่เรา แล้วขอที่อยู่ภายนอกของเรา

มีสองวิธีที่เราสามารถทำได้ วิธีหนึ่งเกี่ยวข้องกับเว็บไซต์ มีเว็บไซต์มากมายที่จะแสดงให้คุณเห็นว่าที่อยู่ IP ภายนอกของคุณคืออะไร และข้อมูลอื่นๆ อีกจำนวนมากเช่นกัน คุณสามารถเข้าถึงสิ่งเหล่านี้ได้ในเบราว์เซอร์ของคุณ หรือใช้เครื่องมือบรรทัดคำสั่ง เช่น curl ที่ส่งคำขอ HTTPS ได้

อีกวิธีหนึ่งคือการใช้คำสั่งเฉพาะเช่น dig คำสั่ง dig สอบถามเซิร์ฟเวอร์ DNS เพื่อดึงข้อมูล

การใช้เบราว์เซอร์

แน่นอน การใช้เบราว์เซอร์ไม่ใช่วิธีที่เป็นมิตรกับสคริปต์ในการรับที่อยู่ IP ภายนอกของคุณ แต่การดูเว็บไซต์ที่ให้บริการนั้นสามารถให้ข้อมูลที่เป็นประโยชน์แก่เราได้ เราเคยแนะนำ ip4.me แต่ไซต์ยังไม่ได้รับการอัปเดตเป็น HTTPS ยังคงใช้ HTTP ที่เก่ากว่าและไม่ปลอดภัย ไซต์ยังคงใช้งานได้ แต่ตอนนี้มีทางเลือกอื่นที่ดีกว่า

ไซต์ ifconfig.me มีชุดข้อมูลที่ดี

เว็บไซต์ ifconfig.me แสดงที่อยู่ IP ภายนอก

กำลังรายงาน IP ภายนอกของเราเป็น 178.238.11.140 เมื่อเลื่อนลงไปตามหน้าเว็บ คุณจะพบรายการคำสั่งที่คุณสามารถใช้เพื่อดึงข้อมูลจากเว็บไซต์

เว็บไซต์ ifconfig.me แสดง et ของคำสั่ง cURL

ตัวอย่างที่พวกเขาให้ทั้งหมดใช้ curl เพื่อสอบปากคำไซต์ มาดูการใช้ curl กัน

ใช้ curl

ในเครื่องทดสอบของเรา Fedora 37 ติดตั้ง curl แล้ว เราจำเป็นต้องติดตั้งบนคอมพิวเตอร์ Ubuntu และ Manjaro ของเรา

ในการติดตั้งบน Ubuntu ประเภท:

 sudo apt ติดตั้ง curl 

การติดตั้ง curl บน Ubuntu

คำสั่งบน Manjaro คือ:

 sudo pacman -S curl 

การติดตั้ง curl บน Manjaro

เราสามารถลองใช้คำสั่งแรกที่แสดงอยู่ในเว็บเพจ ifconfig.me

 curl ifconfig.me 

การดึงที่อยู่ IP ภายนอกโดยใช้การกระทำเริ่มต้นของเว็บไซต์ ifconfig.me

ที่อยู่ IP ภายนอกของเราถูกดึงและแสดงในหน้าต่างเทอร์มินัล ผลลัพธ์คือกระดูกเปล่า ไม่มีแม้แต่อักขระขึ้นบรรทัดใหม่ที่พิมพ์หลังสตริง พรอมต์คำสั่งถูกผูกไว้กับที่อยู่ IP

วิธีใช้ curl เพื่อดาวน์โหลดไฟล์จาก Linux Command Line
วิธีใช้ curl เพื่อดาวน์โหลดไฟล์จาก Linux Command Line

คำสั่งนี้ใช้งานได้เนื่องจากการส่งคืนที่อยู่ IP เป็นการดำเนินการเริ่มต้นของเว็บไซต์ หากการดำเนินการเริ่มต้นเปลี่ยนแปลงไป เราอาจได้รับผลลัพธ์ที่ต่างออกไป เพื่อรองรับสิ่งนี้ เราสามารถระบุได้ว่าเรากำลังขอที่อยู่ IP ของเราโดยเพิ่มตัวระบุ "ip" ลงใน URL

 curl ifconfig.me/ip 

การดึงที่อยู่ IP ภายนอกโดยใช้เว็บไซต์ ifconfig.me ด้วย ip specfier

ส่งคืนที่อยู่ IP เหมือนเดิม

สิ่งนี้แสดงให้เห็นถึงปัญหาในการใช้เว็บไซต์เป็นแหล่งที่มาของที่อยู่ IP ของคุณ เว็บไซต์สามารถปิดตัวลงหรือเปลี่ยนวิธีดำเนินการ หรือรูปแบบของข้อมูลที่ส่งคืนได้ การเปลี่ยนแปลงเหล่านี้จะทำให้สคริปต์ที่ขึ้นอยู่กับไซต์เหล่านี้ทำงานล้มเหลวหรือทำงานที่คาดไม่ถึง

การใช้ทรัพยากรที่มีชื่อเสียงและเชื่อถือได้ เช่น เซิร์ฟเวอร์ DNS เป็นวิธีที่มีประสิทธิภาพมากขึ้นในการรับ IP ภายนอกของคุณ ในการสอบถามเซิร์ฟเวอร์ DNS เราจำเป็นต้องใช้คำสั่ง dig

ที่เกี่ยวข้อง: DNS คืออะไรและฉันควรใช้เซิร์ฟเวอร์ DNS อื่นหรือไม่

การใช้คำสั่งขุด

คราวนี้ มีการติดตั้ง dig บน Fedora และ Ubuntu และเราต้องติดตั้งบน Manjaro เท่านั้น

คำสั่งเป็นคำสั่ง pacman ปกติ ดังนั้นจึงไม่น่าแปลกใจเลย แต่ชื่อแพ็คเกจไม่ใช่สิ่งที่คุณคาดหวัง

 sudo pacman -S ผูกเครื่องมือ 

กำลังติดตั้ง dig บน Manjaro

ในการใช้ dig เพื่อค้นหาที่อยู่ IP ภายนอก เราต้องชี้ไปที่เซิร์ฟเวอร์ DNS เรากำลังใช้เซิร์ฟเวอร์ OpenDNS ซึ่งให้บริการโดย Cisco

เราจำเป็นต้องระบุชื่อของเซิร์ฟเวอร์ DNS ที่เราต้องการใช้ นำหน้าด้วยเครื่องหมาย "@" เราต้องตั้งชื่อประเภทบันทึกที่เราต้องการเรียกด้วย ในกรณีนี้คือ "myip" อ็อพชัน +short ช่วยให้มั่นใจว่าเราได้รับคำตอบที่สั้น ไม่ใช่แบบละเอียด

 dig @resolver1.opendns.com myip.opendns.com +short 

การดึงที่อยู่ IP ภายนอกจากเซิร์ฟเวอร์ DNS ด้วยคำสั่ง dig

คราวนี้ ที่อยู่ IP ของเรามีอักขระขึ้นบรรทัดใหม่ตามหลัง ดังที่เราเห็น สิ่งนี้ถูกพิมพ์หลังจากสตริงที่อยู่ IP ซึ่งไม่ใช่ส่วนสำคัญของสตริงเอง

ที่เกี่ยวข้อง: วิธีใช้คำสั่ง dig บน Linux

การใช้สิ่งเหล่านี้ในสคริปต์

มีสาเหตุหลายประการที่คุณอาจต้องการทราบที่อยู่ IP ภายนอกของคุณจากภายในสคริปต์ บางทีคุณอาจมีสคริปต์ที่ตรวจสอบว่าที่อยู่ IP ภายนอกของคุณมีการเปลี่ยนแปลงหรือไม่ และจะแจ้งให้คุณทราบเมื่อสิ่งนั้นเกิดขึ้น หรือบางทีเซิร์ฟเวอร์อาจแจ้งลูกค้าเมื่อมีการเปลี่ยนแปลงที่อยู่ ไม่ว่าเหตุผลของคุณจะเป็นอย่างไร เราสามารถใช้คำสั่งต่างๆ ที่เราเคยใช้ในบรรทัดคำสั่งภายในสคริปต์ได้อย่างง่ายดาย

ในการดึงข้อมูลที่อยู่ IP ภายนอกของเราและกำหนดให้กับตัวแปร เราเพียงแค่ห่อคำสั่งภายในการแทนที่คำสั่ง $(...) และกำหนดให้กับตัวแปรดังนี้:

 ตัวแปร=$(...)

คำสั่งในวงเล็บจะถูกดำเนินการและค่าที่ส่งกลับจะถูกแทนที่สำหรับนิพจน์ ในตัวอย่างนี้ คำสั่งถูกทำให้ง่ายขึ้นเป็น “variable=return value”

ที่เกี่ยวข้อง: วิธีทำงานกับตัวแปรใน Bash

นี่มันอยู่ในสคริปต์ เราได้เพิ่มตัวเลือก -s (เงียบ) ให้กับคำสั่ง curl เพื่อป้องกันไม่ให้รายงานความคืบหน้าของการดึงข้อมูล

 #!/bin/bash

extaddr=$(curl -s ifconfig.me)

echo "ที่อยู่ IP ภายนอกคือ $extaddr (จาก cURL)"

คัดลอกสคริปต์นี้ไปยังโปรแกรมแก้ไข และบันทึกเป็น “getex1.sh” และทำให้สามารถเรียกใช้งานได้ด้วยคำสั่ง chmod

 chmod +x getex1.sh 

ทำให้สคริปต์สามารถเรียกใช้งานได้ด้วย chmod

มารันสคริปต์กันและดูว่าเราได้อะไรมาบ้าง

 ./getex1.sh 

การรันสคริปต์ getex1.sh

ในการทำเช่นเดียวกันกับตัวเลือกที่มีประสิทธิภาพมากขึ้นของการใช้เซิร์ฟเวอร์ DNS แทนที่จะเป็นเว็บไซต์ สิ่งที่เราต้องทำคือแทนที่คำสั่ง curl ด้วยคำสั่ง dig

 #!/bin/bash

extaddr=$(ขุด @resolver1.opendns.com myip.opendns.com +สั้น)

echo "ที่อยู่ IP ภายนอกคือ $extaddr (จากการขุด)"

บันทึกสิ่งนี้เป็นสคริปต์ “getex2.sh” และทำให้สามารถเรียกใช้งานได้ chmod

 chmod +x getex2.sh 

ทำให้สคริปต์สามารถเรียกใช้งานได้ด้วย chmod

มารันสคริปต์นี้กัน

 ./getex2.sh 

การรันสคริปต์ getex2.sh

เราสามารถเห็นได้จากผลลัพธ์ของทั้งสองสคริปต์ว่าแม้คำสั่ง dig จะพิมพ์อักขระขึ้นบรรทัดใหม่บนบรรทัดคำสั่ง แต่ในสคริปต์นั้นไม่มีการขึ้นบรรทัดใหม่ให้กับตัวแปร extaddr

ไปเพื่อความน่าเชื่อถือ

การใช้บริการที่มีชื่อเสียงและมีรูปแบบผลลัพธ์ที่คาดเดาได้จะปลอดภัยกว่าการใช้เว็บไซต์ที่ "ไม่เป็นทางการ" เช่นเดียวกับทุกสิ่งทุกอย่างบนอินเทอร์เน็ต ให้ดูว่าคุณได้รับข้อมูลมาจากใครบ้าง'

ที่เกี่ยวข้อง: วิธีให้สคริปต์ Linux ตรวจพบว่ากำลังทำงานอยู่ในเครื่องเสมือน