ฉันจะรับข้อมูลพรอกซีของ Mac OS X ในสคริปต์ Bash ได้อย่างไร


13

ฉันมีสถานที่ตั้งเครือข่ายหลายแห่งบนแล็ปท็อปของฉัน: ที่ทำงานที่บ้าน ฯลฯ ที่ทำงานหนึ่งทั้งหมดมีการตั้งค่าพร็อกซีเซิร์ฟเวอร์ในขณะที่ที่อื่นไม่ได้ตั้งค่า ใช้งานได้ดีกับแอปพลิเคชั่น OSX - Safari, Mail, แม้แต่ Firefox และ Thunderbird ด้วยปลั๊กอินSystem Proxy

สำหรับการใช้งานขั้วเช่นgit, svn, gemและcurlฉันมีต่อไปนี้ในของฉัน.bash_profile:

export HTTP_PROXY='http://proxy.mycompany.com:80'
export http_proxy=$HTTP_PROXY

คำถามของฉันคือ: มีวิธีทำให้ตัวแปรที่ส่งออกค้นหาค่าจากตำแหน่งปัจจุบันของระบบของฉันหรือไม่? ฉันชอบที่จะทำแบบไดนามิก (ดังนั้นถ้าฉันเปลี่ยนสถานที่ในช่วงเทอร์มินัลมันจะเปลี่ยน) แต่ฉันจะมีความสุขกับหนึ่งที่ตั้งไว้เมื่อ.bash_profileวิ่ง (หมายถึงฉันจะต้องเริ่มเซสชั่นขั้วใหม่ เมื่อฉันเปลี่ยนสถานที่)

ขอบคุณ!


นี่คือสคริปต์ทุบตีซึ่งใช้ networksetup และความปลอดภัยเพื่อดึงข้อมูลพรอกซีและตั้งค่า http_proxy และ https_proxy: gist.github.com/alexargo/4657760

คำตอบ:


8

Mac OS X รุ่นใด ฉันไม่แน่ใจว่าเครื่องมือนี้มาพร้อมกับ Mac OS X 10.4 หรือเก่ากว่า

networksetupควรเป็นสิ่งที่คุณกำลังมองหาsudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICEเช่น (เช่น sudo networksetup -getwebproxy Airport)

ผลลัพธ์จะออกมาดังนี้:

Enabled: Yes
Server: SERVER_ADDRESS
Port: 123
Authenticated Proxy Enabled: 0 for false, 1 for true

ดังนั้นคุณจะต้องแปลงผลลัพธ์เป็นสิ่งที่ใช้งานได้

ตัวอย่างที่หยาบคายจริงๆโดยใช้ awk สองสามครั้ง (ทักษะ awk ของฉันค่อนข้างพื้นฐาน) จะเป็น:

sudo networksetup -getwebproxy Airport | awk {'print $2'} | awk {'getline l2; getline l3; print "http://"l2":"l3'} | head -n 1

ผลลัพธ์ในผลลัพธ์ http://SERVER_ADDRESS:123


6
รายการของบริการทั้งหมด:networksetup -listallnetworkservices
Arjan s

2
ฉันชอบความคิดนี้ แต่มันไม่ได้ผลสำหรับฉัน ถ้าฉันแค่ทำsudo networksetup -getwebproxy Ethernetฉันก็จะได้งานพิมพ์และจากนั้นก็เป็น segfault ฉันจินตนาการว่า segfault เป็นสาเหตุให้ท่อแตกดังนั้นจึงawkไม่สามารถแยกวิเคราะห์ได้
James A. Rosen

มีการส่งออกข้อมูลใด ๆ และมันยังคง segfault โดยไม่มีคำสั่ง awk หรือไม่?
Chealion

ฉันคิดว่าฉันเห็นข้อผิดพลาดในการแบ่งเซ็กเมนต์บน Mac ของฉันเองหนึ่งครั้ง ฉันไม่มีปัญหาในวันที่ 10.5.8 หรือ 10.6.1 (ทั้ง Intel) บางทีคุณอาจจะอยู่ในรุ่นอื่น ๆ ?
Arjan

ฉัน 10.5.8 awkและมันเกิดขึ้นได้โดยไม่ต้อง การเพิ่ม awk ทำให้ข้อความ segfault หายไป . . พร้อมกับเอาต์พุตอื่นทั้งหมด
James A. Rosen

4

ในคำตอบข้างต้นมีความคิดเห็นจากtlrobinsonเกี่ยวกับวิธีที่มันไม่รวมหมายเลขพอร์ต

คุณสามารถทำได้โดยสลับHTTP Proxy Serverด้วยHTTP Proxy Port

ฉันได้เห็นสิ่งนี้ทำเช่นนี้:

system_profiler SPNetworkDataType | grep "HTTP Proxy Server" | awk '{print $4}' | head -1
system_profiler SPNetworkDataType | grep "HTTP Proxy Port" | awk '{print $4}' | head -1

3

นอกจากนี้คำสั่งนี้อาจช่วยให้ค้นพบการตั้งค่าพร็อกซีอื่น ๆ : scutil --proxy


1

ดูเหมือนว่าจะทำงานต่อไปนี้ แต่ฉันไม่แน่ใจว่ามันแข็งแกร่งแค่ไหน:

system_profiler SPNetworkDataType|grep "HTTP Proxy Server"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'}

ไม่สามารถใช้งานได้หากสถานที่ตั้งของคุณใช้proxy.pacแทนตำแหน่งพร็อกซีที่มีรหัสตายตัว


น่าเสียดายที่นี่ดูเหมือนจะไม่รวมหมายเลขพอร์ต
tlrobinson

0

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

  1. คอมไพล์ด้วย xCode
  2. เพิ่ม:

    eval `./path/to/export-proxies`

    ที่คุณ.profile, หรือ.bashrc.bash_profile

หลังจากที่คุณสามารถใช้ตัวแปรเช่น$HTTP_PROXY, $http_proxy, $HttpProxyฯลฯ สำหรับโปรโตคอลทั้งหมด (HTTP, FTP, ถุงเท้า) รวมถึง$NO_PROXYข้อยกเว้น สิ่งนี้จะใช้ได้กับเครื่องมือ CLI ส่วนใหญ่และรับการตั้งค่าจากแผงควบคุม OS X

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.