ฉันสามารถสร้างการแทนที่ dns ที่คล้ายกับการเขียนใน / etc / hosts โดยไม่ต้องเข้าถึงรูท


48

ฉันต้องการตั้งค่าระเบียน dns ที่เบราว์เซอร์ของฉันจะใช้ แต่ฉันไม่มีสิทธิ์เข้าถึงระดับรากดังนั้นฉันจึงไม่สามารถแก้ไข/etc/hostsได้ ฉันต้องทำสิ่งนี้เพื่อทดสอบ vhosts ด้วย apache ซึ่ง dns ยังไม่ได้ตั้งค่า ฉันมีสิทธิ์เข้าถึง firefox และ chrome ดังนั้นหากมีปลั๊กอินที่สามารถอำนวยความสะดวกได้ หรือตัวเลือกอื่น ๆ มีประโยชน์

update:ทางเลือกในการแทนที่ dns น่าจะเป็นการแก้ไขส่วนหัว HTTP หากสิ่งที่ถูกต้องถูกส่งไปยัง apache เนื้อหาที่ถูกต้องควรถูกส่งคืน


1
บรรทัดสุดท้ายไม่มีความชัดเจน นอกจากนี้สิ่งนี้จะไม่พอดีกับ SF หรือไม่
tshepang

@tshepang ... ไม่เพราะฉันต้องทำสิ่งนี้บนเดสก์ทอปลินุกซ์?
xenoterracide

1
ยังไม่ชัดเจน "หรือตัวเลือกอื่น ๆ มีประโยชน์" หมายความว่าอย่างไร อย่าทำให้ฉันเดา
tshepang

3
@tshepang ฉันไม่รู้ว่าสิ่งที่ฉันกำลังมองหา ... ถ้าฉันรู้ว่าทำไมฉันจะถาม? อาจมีตัวเลือกที่ฉันไม่ได้พิจารณา ฉันรู้สึกว่าคุณกำลังขอให้ฉันอธิบายว่า apache โฮสต์เสมือน http และ DNS ทำงานร่วมกันได้อย่างไร
xenoterracide

ฉันคิดว่าคุณกำลังมองหาสิ่งนี้: unix.stackexchange.com/a/104511/135943
Wildcard

คำตอบ:


65

ฉันกำลังหาวิธีเรียกใช้โปรแกรมที่มีความละเอียด DNS ที่ปรับเปลี่ยนเพื่อการทดสอบ สำหรับฉันการแก้ปัญหาคือการใช้HOSTALIASESตัวแปรสภาพแวดล้อม:

$ echo "foo www.google.com" >> ~/.hosts
$ HOSTALIASES=~/.hosts wget foo

hostname(7)ดู

(หมายเหตุด้าน: ในตัวอย่างHOSTALIASESตัวแปรสภาพแวดล้อมส่งผลกระทบต่อwgetกระบวนการเท่านั้นแน่นอนคุณสามารถexport HOSTALIASESมีผลกับกระบวนการย่อยทั้งหมดของเชลล์ปัจจุบันได้)


1
นี่น่าจะเป็น + 10k น่าเสียดายที่ฉันให้ +1 กับคุณได้เท่านั้น
xenoterracide

ฉันเห็นด้วย! + 10k !!
Anders Hansson

3
ขอบคุณมาก! ตัวอย่างที่ควรย่อหน้าในกรณีส่วนใหญ่:export export HOSTALIASES=~/.hosts
ezequiel-garzon

8
ดูเหมือนว่าสนับสนุนโฮสต์ไปยังชื่อแทนโฮสต์เท่านั้นไม่ใช่ IP และโฮสต์ไม่สามารถมี "."
netawater

มีวิธีแก้ไขปัญหาเดียวกันสำหรับ Windows หรือไม่
Akceptor

10

คุณสามารถเขียน wrapper รอบฟังก์ชั่น libc เพื่อแก้ไขชื่อโฮสต์และค้นหาในไฟล์ที่แตกต่างจาก / etc / hosts จากนั้นเรียกใช้แอปพลิเคชันที่คุณต้องการใช้ไฟล์โฮสต์ของคุณ

LD_PRELOAD=wrapper.so firefox

4
มีประโยชน์มากที่สุดทำให้ wrapper ของคุณเปลี่ยนเส้นทางการเปิด/etc/nsswitch.confไปยัง~/.nsswitch.confและทำการ~/.nsswitch.confสอบถามฐานข้อมูล DNS ของคุณ
Gilles 'หยุดความชั่วร้าย'

6

ฉันคิดว่าวิธีที่ดีที่สุดในการทำเช่นนี้คือการตั้งค่าพร็อกซี SOCKS5 และแจ้งให้ firefox ส่งคำขอ DNS ผ่านพร็อกซี SOCKS5 (network.proxy.socks_remote_dns) คุณสามารถตั้งค่าพร็อกซีถุงเท้า socks5 กับ openssh ได้อย่างง่ายดาย (ตัวเลือก -D) และให้รีโมตโฮสต์ทำงานด้วยการกำหนดเอง / etc / hosts หรือสิ่งอื่นเช่นDNSMasqสำหรับการตั้งค่า DNS ที่ซับซ้อนยิ่งขึ้น อย่างมีประสิทธิภาพแม้ว่านี่จะเป็นการผลักดันการกำหนดค่าการตั้งค่า DNS ไปยังระบบที่คุณสามารถทำการเปลี่ยนแปลงทั่วทั้งระบบได้


พูดง่ายกว่าทำเมื่อพิจารณาถึงไฟร์วอลล์ที่ยิ่งใหญ่ที่ถูกสร้างขึ้นเพื่อป้องกันเราจากการ
แอบอ้าง

5

ลองดูคำถามต่อไปนี้ที่ superuser:

https://superuser.com/questions/184643/override-dns-in-firefox

หากตัวเลือกที่กล่าวถึงและลิงก์ SO ไม่ใช่โซลูชันที่ใช้งานได้ให้ลองดู:

https://superuser.com/questions/100239/hostname-override-in-firefox

โดยเฉพาะอย่างยิ่งตรวจสอบ:

https://addons.mozilla.org/en-US/firefox/addon/redirector/

ดูเหมือนว่า addon นี้จะช่วยได้ แต่ฉันขึ้นอยู่กับการนำไปใช้จริง


โชคไม่ดีเหมือน op ในคำถามนั้นไม่มีสิ่งใดที่ดูเหมือนจะเป็นไปได้
xenoterracide

@xenoterracide - ฉันได้อัปเดตคำตอบแล้ว - บางทีตัวเลือกเปลี่ยนเส้นทางอาจเป็นตัวเลือกหรือไม่
maxschlepzig

ฉันไม่คิดอย่างนั้นจากวิธีที่ใช้คำพูด .. สิ่งที่ฉันต้องทำจริงๆคือแก้ไขส่วนหัว HTTP ที่ส่งไป ... เป็นตัวเลือกทางเลือกสำหรับการแฮ็กโดยใช้โฮสต์
xenoterracide

ฉันแหย่ไปรอบ ๆ โซลูชัน SO (TamperData) แต่ฉันไม่เห็นวิธีการแก้ไขโฮสต์ในนั้น ฉันสงสัยว่าสิ่งที่ http ส่วนหัวสดจริง ๆ ทำให้ฉันสามารถแก้ไขส่วนหัวมันบอกว่ามันเป็นผู้ชม
xenoterracide

ฉันคิดว่าส่วนขยาย Modify Headers มีการระบุไว้เล็กน้อยใน SO one ใช้งานได้ ... หากคุณใช้ชื่อโฮสต์ Host ... ในนั้น ... ยังไม่ได้ทดสอบ ... นอกไซต์ที่ใช้งานอยู่
xenoterracide

2

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


0

ฉันต้องการสิ่งที่คล้ายกันสำหรับ ssh, scp ฯลฯ สำหรับเซิร์ฟเวอร์ที่เปลี่ยน IP ทุกสองสัปดาห์ (และไอทีของเรามีความล่าช้าสองสัปดาห์ในการตั้งค่าโฮสต์) ฉันแก้ไขมันโดยใช้ตัวแปรพิเศษสำหรับเซิร์ฟเวอร์นี้: export FOO='131.227.aaa.bbbจากนั้นฉันสามารถทำได้ssh bar@$FOOและฉันเปลี่ยน IP ใน~/.bashrcเวลาใดก็ได้ที่มีการเปลี่ยนแปลง ...


-2

โชคไม่ดีที่คุณทำไม่ได้ยกเว้นคุณเขียนอินเทอร์เน็ตเบราว์เซอร์ของคุณเอง

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

คุณยังสามารถติดตั้ง VM บนพีซีของคุณติดตั้งการกระจาย Linux, Apache และทดสอบการเปลี่ยนแปลงของคุณ (มันไม่ยากอย่างที่คิด)

ปรับปรุง

เพื่ออธิบายให้ดียิ่งขึ้นแต่ละแอปพลิเคชันจะถูกเขียนโดยใช้ไลบรารีมาตรฐานวิธีนี้ไม่มีใครต้องเขียนไลบรารี่ระดับต่ำและฟังก์ชั่นเช่น gethostbyname () อีกครั้ง

โดยปกติฟังก์ชั่นเหล่านี้จะถูกตั้งค่าให้ใช้ไฟล์ (/ etc / hosts) และ DNS ดังนั้นหากคุณต้องการเบราว์เซอร์ของคุณจะแก้ไขชื่อได้มากกว่าที่ตั้งไว้ใน / etc / hosts คุณไม่มีทางเลือกมากเกินไป .

  1. คุณสามารถตั้งค่าเซิร์ฟเวอร์ DNS ของคุณเองและถามว่าใครมีสิทธิ์ในการเปลี่ยน /etc/resolve.conf
  2. คุณสามารถติดตั้งพร็อกซีเซิร์ฟเวอร์เช่นDeleGateและตั้งกฎบางอย่างสำหรับ VirtualHost ของคุณ
  3. ถามสิทธิ์ sudo บนโฮสต์ลูกค้ารายนั้น
  4. เปลี่ยนพฤติกรรมของแอปพลิเคชันที่คุณใช้เพื่อทดสอบการเชื่อมต่อ (ฉันเดาว่าเบราว์เซอร์) ตัวอย่างเช่นhttps://addons.mozilla.org/en-US/firefox/addon/switchhosts/

4
-1 ถ้อยคำไม่ดีและอุปถัมภ์ ฉันเป็นผู้ให้บริการโฮสต์และเป็นเว็บไซต์ลูกค้าแช่งบนเซิร์ฟเวอร์ของเราที่ฉันต้องการทดสอบ เรามีลินุกซ์สำหรับบูตเครือข่ายที่ฉันไม่มีสิทธิ์การเข้าถึงของผู้ดูแลระบบและฉันไม่เชื่อว่าฉันสามารถบูต VM บนมันได้
xenoterracide

@ xenoterracide ไม่มีอะไรจะพูดมากเกินไป มันเป็นไปไม่ได้ในสิ่งที่คุณขอยกเว้นคุณเปลี่ยนวิธีการสร้าง SOCKET
tmow

1
@ xenoterracide BTW ไม่มีความตั้งใจที่จะรุกราน
tmow

เช่นเดียวกับผู้ให้บริการโฮสติ้ง ... ฉันมี "สิทธิ์ sudo" จริง ๆ แล้วฉันมีรูทจริงทุกช่องและเข้าถึงทุกอย่างได้อย่างเต็มที่ ... ยกเว้นเดสก์ท็อป (eyeroll) แต่ถ้าพวกเขายังไม่ต้องการเปลี่ยนเนมเซิร์ฟเวอร์ของพวกเขา .. ฉันไม่สามารถช่วยได้ ...
xenoterracide

1
ด้วย LD_PRELOAD คุณสามารถ 'แทนที่' ฟังก์ชั่น 'ระดับต่ำ' เฉพาะและทำสิ่งที่คุณต้องการเช่น บอกโปรแกรมเกี่ยวกับ '/ etc / hosts' ของคุณเองopen()และการเรียกระดับต่ำ ๆ อื่น ๆ .. ตราบใดที่การโหลดโค้ดแบบไดนามิกนั้นถูก invovled (.so)
Akira
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.