ฉันไม่คิดว่าจะมีคำตอบที่ถูกต้องสำหรับคำถามของคุณ มีวิธีมากมายในการเข้าใกล้สิ่งที่คุณต้องการ ดังนั้นฉันจะให้คำแนะนำบางอย่างในการทำให้เสร็จ
หากเครื่องมีอินเทอร์เฟซมากกว่า 2 อินเทอร์เฟซ ( lo
นับเป็นหนึ่ง) คุณจะมีปัญหาในการตรวจจับอินเทอร์เฟซที่ถูกต้องโดยอัตโนมัติ นี่คือสูตรอาหารบางส่วนเกี่ยวกับวิธีการทำ
ตัวอย่างเช่นปัญหาคือถ้าโฮสต์อยู่ใน DMZ หลังไฟร์วอลล์ NAT ซึ่งเปลี่ยน IP สาธารณะเป็น IP ส่วนตัวและส่งต่อคำขอ เครื่องของคุณอาจมีอินเทอร์เฟซ 10 รายการ แต่มีเพียงอินเทอร์เฟซเดียวเท่านั้นที่ตรงกับอินเทอร์เฟซสาธารณะ
แม้แต่การตรวจจับอัตโนมัติก็ไม่สามารถใช้งานได้ในกรณีที่คุณใช้ NAT แบบสองครั้งซึ่งไฟร์วอลล์ของคุณยังแปล source-IP เป็นสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ดังนั้นคุณจึงไม่แน่ใจด้วยซ้ำว่าเส้นทางเริ่มต้นนำไปสู่อินเทอร์เฟซของคุณด้วยอินเทอร์เฟซสาธารณะ
ตรวจจับผ่านเส้นทางเริ่มต้น
นี่เป็นวิธีที่ฉันแนะนำในการตรวจจับสิ่งต่างๆโดยอัตโนมัติ
สิ่งที่คล้ายกันip r get 1.1.1.1
มักจะบอกคุณถึงอินเทอร์เฟซที่มีเส้นทางเริ่มต้น
หากคุณต้องการสร้างสิ่งนี้ใหม่ในภาษาสคริปต์ / โปรแกรมที่คุณชื่นชอบให้ใช้strace ip r get 1.1.1.1
และเดินตามถนนอิฐสีเหลือง
ตั้งค่าด้วย /etc/hosts
นี่คือคำแนะนำของฉันหากคุณต้องการควบคุม
คุณสามารถสร้างรายการใน/etc/hosts
like
80.190.1.3 publicinterfaceip
จากนั้นคุณสามารถใช้นามแฝงนี้publicinterfaceip
เพื่ออ้างถึงอินเทอร์เฟซสาธารณะของคุณ
น่าเศร้าที่haproxy
ไม่ต้องกังวลกับเคล็ดลับนี้กับ IPv6
ใช้สิ่งแวดล้อม
นี่เป็นวิธีแก้ปัญหาที่ดี/etc/hosts
ในกรณีที่คุณไม่อยู่root
เช่นเดียวกับ/etc/hosts
. แต่ใช้สภาพแวดล้อมสำหรับสิ่งนี้ คุณสามารถลอง/etc/profile
หรือ~/.profile
สำหรับสิ่งนี้
ดังนั้นหากโปรแกรมของคุณต้องการตัวแปรMYPUBLICIP
คุณสามารถรวมโค้ดเช่น (นี่คือ C อย่าลังเลที่จะสร้าง C ++ จากมัน):
#define MYPUBLICIPENVVAR "MYPUBLICIP"
const char *mypublicip = getenv(MYPUBLICIPENVVAR);
if (!mypublicip) { fprintf(stderr, "please set environment variable %s\n", MYPUBLICIPENVVAR); exit(3); }
ดังนั้นคุณสามารถเรียกสคริปต์ / โปรแกรมของคุณ/path/to/your/script
เช่นนี้
MYPUBLICIP=80.190.1.3 /path/to/your/script
สิ่งนี้ยังใช้งานได้ในcrontab
.
ระบุอินเทอร์เฟซทั้งหมดและกำจัดสิ่งที่คุณไม่ต้องการ
วิธีที่สิ้นหวังหากคุณไม่สามารถใช้ ip
หากคุณรู้ว่าคุณไม่ต้องการอะไรคุณสามารถแจกแจงอินเทอร์เฟซทั้งหมดและละเว้นอินเทอร์เฟซที่ผิดพลาดทั้งหมด
นี่ดูเหมือนจะเป็นคำตอบhttps://stackoverflow.com/a/265978/490291สำหรับแนวทางนี้
ทำเหมือน DLNA
วิธีการของคนเมาที่พยายามที่จะจมตัวเองในแอลกอฮอล์
คุณสามารถลองระบุเกตเวย์ UPnP ทั้งหมดบนเครือข่ายของคุณและด้วยวิธีนี้จะหาเส้นทางที่เหมาะสมสำหรับ "ภายนอก" บางอย่าง สิ่งนี้อาจอยู่บนเส้นทางที่เส้นทางเริ่มต้นของคุณไม่ได้ชี้ไป
ดูข้อมูลเพิ่มเติมได้ที่https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol
สิ่งนี้ทำให้คุณรู้สึกประทับใจว่าอันไหนคืออินเทอร์เฟซสาธารณะที่แท้จริงของคุณแม้ว่าเส้นทางเริ่มต้นของคุณจะชี้ไปที่อื่นก็ตาม
มีมากยิ่งขึ้น
ที่ภูเขาตรงกับผู้เผยพระวจนะ
เราเตอร์ IPv6 โฆษณาตัวเองเพื่อให้คำนำหน้า IPv6 ที่ถูกต้องแก่คุณ การดูคำนำหน้าจะช่วยให้คุณทราบว่ามี IP ภายในหรือ Global หรือไม่
คุณสามารถฟัง IGMP หรือเฟรม IBGP เพื่อค้นหาเกตเวย์ที่เหมาะสม
มีที่อยู่ IP น้อยกว่า 2 ^ 32 ดังนั้นจึงใช้เวลาไม่นานบน LAN ในการส่ง Ping ทั้งหมด สิ่งนี้ให้คำแนะนำทางสถิติว่าส่วนใหญ่ของอินเทอร์เน็ตอยู่ที่ใดจากมุมมองของคุณ อย่างไรก็ตามคุณควรมีเหตุผลมากกว่าhttps://de.wikipedia.org/wiki/SQL_Slammer ที่มีชื่อเสียง
ICMP และแม้แต่ ARP เป็นแหล่งข้อมูลที่ดีสำหรับข้อมูลเครือข่ายไซด์แบนด์ มันอาจช่วยคุณได้เช่นกัน
คุณสามารถใช้ที่อยู่ Ethernet Broadcast เพื่อติดต่อกับอุปกรณ์โครงสร้างพื้นฐานเครือข่ายทั้งหมดของคุณซึ่งมักจะช่วยได้เช่น DHCP (แม้กระทั่ง DHCPv6) เป็นต้น
รายการเพิ่มเติมนี้อาจไม่มีที่สิ้นสุดและไม่สมบูรณ์เสมอไปเนื่องจากผู้ผลิตอุปกรณ์เครือข่ายทุกรายกำลังคิดค้นช่องโหว่ด้านความปลอดภัยใหม่ ๆ เกี่ยวกับวิธีตรวจจับอุปกรณ์ของตนเองโดยอัตโนมัติ ซึ่งมักจะช่วยได้มากในการตรวจจับอินเทอร์เฟซสาธารณะบางส่วนที่ไม่มีส่วนต่อประสาน
'Nuff กล่าวว่า. ออก.