หา IP ของมึงจาก Terminal
คำสั่งด้านล่างนี้จะแสดง IP สาธารณะ ของคุณ (IP ที่อินเทอร์เน็ตมองเห็น) โดยตรงจาก terminal หรือ command prompt โดยไม่ต้องเปิดเบราว์เซอร์
Linux / macOS
curl — วิธีที่ง่ายที่สุด
curl https://api.ipify.org
คืนค่า IP address เพียงบรรทัดเดียว ไม่มีขึ้นบรรทัดใหม่
# รูปแบบ JSON
curl "https://api.ipify.org?format=json"
curl — parse ด้วย jq
curl -s "https://api.ipify.org?format=json" | jq -r .ip
ต้องติดตั้ง jq ก่อน (brew install jq บน macOS หรือ apt install jq บน Ubuntu)
wget — ทางเลือกแทน curl
wget -qO- https://api.ipify.org
ใช้ได้บน Linux ส่วนใหญ่ที่ไม่ได้ติดตั้ง curl
dig — ผ่าน DNS ไม่ต้องใช้ HTTP
dig +short myip.opendns.com @resolver1.opendns.com
ใช้ OpenDNS เพื่อ resolve IP สาธารณะ รวดเร็วและไม่ต้องพึ่ง HTTP วิธีนี้เหมาะสำหรับ environment ที่ HTTP ถูก block
เช็ค IPv6 โดยเฉพาะ
curl -6 https://api64.ipify.org
ถ้าเครือข่ายคุณรองรับ IPv6 คำสั่งนี้จะคืน IPv6 address
บันทึก IP เป็น environment variable
MY_IP=$(curl -s https://api.ipify.org)
echo "Your public IP: $MY_IP"
มีประโยชน์สำหรับ shell script ที่ต้องการรู้ IP ปัจจุบันเพื่อใช้ต่อ เช่น อัปเดต DNS หรือ whitelist
แสดง interface เครือข่าย (IP ในเครื่อง)
# Linux
ip addr show
# macOS
ifconfig | grep "inet "
IP เหล่านี้คือ IP ส่วนตัวในเครือข่ายท้องถิ่น ไม่ใช่ IP สาธารณะที่อินเทอร์เน็ตมองเห็น
Windows
ipconfig — แสดง IP ทั้งหมด
ipconfig /all
แสดง IP address ของ network adapter ทุกตัว รวมถึง DNS server, default gateway และ MAC address
nslookup — ผ่าน DNS
nslookup myip.opendns.com resolver1.opendns.com
คล้ายกับ dig บน Linux ใช้ OpenDNS เพื่อหา IP สาธารณะ
PowerShell
ดึง IP สาธารณะ
(Invoke-WebRequest -Uri "https://api.ipify.org").Content
# alias สั้นกว่า
(irm "https://api.ipify.org")
บันทึกเป็น variable
$myIP = (irm "https://api.ipify.org")
Write-Host "Public IP: $myIP"
แสดง IP ทั้งหมดในเครื่อง
Get-NetIPAddress | Where-Object {$_.AddressFamily -eq "IPv4"} | Select-Object InterfaceAlias, IPAddress
ใช้กับ Docker หรือ CI/CD
ถ้าต้องการตรวจสอบ IP ของ container หรือ pipeline ระหว่าง build ให้ใช้:
# ใน Dockerfile หรือ CI script
curl -s https://api.ipify.org
IP ที่ได้จะเป็น IP ของ host หรือ NAT gateway ของ cloud provider ไม่ใช่ IP ของ container เอง ซึ่งมีประโยชน์ในการ debug ว่า outbound traffic ออกจาก IP ไหน
บริการอื่นที่ใช้แทนกันได้
ถ้า api.ipify.org ไม่ตอบสนอง สามารถใช้บริการอื่นแทนได้:
curl https://ifconfig.me
curl https://icanhazip.com
curl https://checkip.amazonaws.com
ทุกบริการคืนค่า IP address เป็น plain text เหมาะสำหรับ script
Troubleshooting
- curl ไม่ติดตั้ง — ใช้
wgetหรือdigแทน บน macOS ติดตั้งด้วยbrew install curl - อยู่หลัง corporate proxy — IP ที่ได้อาจเป็น IP ของ proxy แทน IP จริงของเครื่อง ลองเพิ่ม
-x ""เพื่อ bypass proxy - ใช้ VPN อยู่ — IP ที่ได้คือ IP ของ VPN server ไม่ใช่ IP จริงของคุณ
- ผล curl กับเว็บต่างกัน — อาจเพราะ IPv4/IPv6 resolution ต่างกัน ลองเพิ่ม
-4หรือ-6เพื่อบังคับโปรโตคอล - timeout หรือ connection refused — ลองบริการสำรองเช่น
ifconfig.meหรือใช้digแทน
สำหรับนักพัฒนา: Debug Proxy และ CDN Headers
เมื่อแอปพลิเคชันทำงานหลัง reverse proxy หรือ CDN การรู้ว่า IP จริงของ client ถูกส่งผ่าน header ไหนมีความสำคัญมาก
ดู forwarding headers ด้วย curl
# ดู response headers ทั้งหมด (รวมถึง IP ที่เซิร์ฟเวอร์มองเห็น)
curl -s -I https://api.ipify.org
# ดู headers ที่เบราว์เซอร์/ไคลเอนต์ส่งไป
curl -v https://api.ipify.org 2>&1 | grep "^>"
ตรวจสอบ headers ที่ Cloudflare หรือ CDN เพิ่มเข้ามา
CDN เช่น Cloudflare จะเพิ่ม headers พิเศษเพื่อบอก IP จริงของ client:
CF-Connecting-IP— IP จริงของ client ที่ Cloudflare ส่งมาให้ serverX-Forwarded-For— รายการ IP ตามลำดับ hop ของ proxy (อาจถูกปลอมแปลงได้)X-Real-IP— IP จริงที่ Nginx หรือ proxy อื่นส่งมา
เปิด IPGu.net เพื่อดู headers ทั้งหมดที่ server มองเห็นจากการเชื่อมต่อของคุณ รวมถึง forwarding headers ที่ CDN เพิ่มเข้ามา
Detect IP ใน VPN หรือ proxy environment
# ตรวจสอบว่า curl ใช้ IP อะไร (VPN/proxy หรือ IP จริง)
curl -s https://api.ipify.org
# บังคับ bypass proxy (ถ้ามี HTTP_PROXY ใน environment)
curl -x "" -s https://api.ipify.org
# เปรียบเทียบ IPv4 กับ IPv6
curl -4 -s https://api.ipify.org && curl -6 -s https://api64.ipify.org
คำถามที่พบบ่อย
curl กับ dig ให้ผล IP ต่างกัน ทำไม?
curl ใช้ HTTP ซึ่งผ่าน proxy ในเครือข่าย ส่วน dig ใช้ DNS โดยตรง ถ้า IP ต่างกันแสดงว่ามี HTTP proxy อยู่ในเครือข่าย
ทำไม IP ใน curl ต่างจากที่เห็นในเบราว์เซอร์?
อาจเกิดจาก IPv4/IPv6 dual-stack ที่แตกต่างกัน เบราว์เซอร์อาจเลือก IPv6 ในขณะที่ curl ใช้ IPv4 ลองเพิ่ม -4 หรือ -6 เพื่อระบุโปรโตคอล
ใน Docker container จะรู้ IP outbound ได้อย่างไร?
รัน curl -s https://api.ipify.org ภายใน container จะได้ IP ของ host หรือ NAT gateway ไม่ใช่ IP ภายใน container