Làm cách nào tôi có thể nhận thông tin proxy của Mac OS X trong tập lệnh Bash?


13

Tôi có một số vị trí mạng được thiết lập trên máy tính xách tay của mình: Công việc, Gia đình, v.v ... Tất cả các công việc đều có một máy chủ proxy được thiết lập, trong khi các vị trí khác thì không. Điều này hoạt động tốt cho các ứng dụng OSX - Safari, Mail, thậm chí Firefox và Thunderbird với plugin System Proxy .

Đối với các ứng dụng thiết bị đầu cuối như git, svn, gem, và curltôi có những điều sau đây trong tôi .bash_profile:

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

Câu hỏi của tôi là: có cách nào để biến biến được xuất tìm giá trị từ vị trí hiện tại của hệ thống của tôi không? Tôi muốn nó được thực hiện một cách linh hoạt (vì vậy nếu tôi thay đổi vị trí trong phiên cuối thì nó sẽ thay đổi), nhưng tôi rất vui khi chỉ cài đặt nó khi .bash_profilechạy (có nghĩa là tôi phải bắt đầu phiên cuối mới khi tôi thay đổi địa điểm).

Cảm ơn!


Dưới đây là tập lệnh bash sử dụng bộ dữ liệu mạng và bảo mật để trích xuất thông tin proxy và đặt http_proxy và https_proxy: gist.github.com/alexargo/4657760

Câu trả lời:


8

Phiên bản nào của Mac OS X? Tôi không tích cực công cụ được bao gồm trong Mac OS X 10.4 trở về trước.

networksetupnên là những gì bạn đang tìm kiếm, cụ thể là sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(ví dụ: sudo networksetup -getwebproxy Airport)

Đầu ra xuất hiện như vậy:

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

Vì vậy, bạn sẽ cần phải chuyển đổi đầu ra thành một cái gì đó có thể sử dụng.

Một ví dụ thực sự thô sơ khi sử dụng awk một vài lần (kỹ năng awk của tôi khá cơ bản) sẽ là:

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

Kết quả trong một đầu ra http://SERVER_ADDRESS:123


6
Danh sách tất cả các dịch vụ:networksetup -listallnetworkservices
Arjan

2
Tôi thích ý tưởng này, nhưng nó không hiệu quả với tôi. Nếu tôi chỉ làm sudo networksetup -getwebproxy Ethernet, tôi nhận được bản in và sau đó là một segfault. Tôi tưởng tượng segfault khiến đường ống bị vỡ, vì vậy awkkhông bao giờ có bất cứ điều gì để phân tích.
James A. Rosen

Có bất kỳ thông tin đầu ra? Và nó vẫn segfault mà không có lệnh awk?
Chealion

Tôi nghĩ rằng tôi thực sự đã thấy lỗi phân đoạn đó trên máy Mac của riêng tôi một lần. Bây giờ tôi không gặp sự cố vào ngày 10.5.8 hoặc 10.6.1 (cả Intel). Có lẽ bạn đang ở một số phiên bản khác?
Arjan

Tôi đang ở ngày 10.5.8, và nó xảy ra mà không có awk. Thêm awk làm cho thông báo segfault biến mất. . . cùng với tất cả các đầu ra khác.
James A. Rosen

4

Trong câu trả lời ở trên , có một nhận xét từ tlrobinson về cách nó không bao gồm số cổng.

Bạn có thể làm điều đó bằng cách tắt HTTP Proxy Server với HTTP Proxy Port

Tôi cũng đã thấy điều này được thực hiện như thế này:

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

Ngoài ra, lệnh này có thể giúp khám phá các cài đặt proxy khác: scutil --proxy


1

Những điều sau đây có vẻ hiệu quả, nhưng tôi không chắc nó mạnh đến mức nào:

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

Nó không hoạt động nếu Vị trí của bạn sử dụng proxy.pacthay vì vị trí proxy được mã hóa cứng.


Thật không may, điều này dường như không bao gồm số cổng.
tlrobinson

0

Bạn có thể sử dụng công cụ nhỏ mà tôi đã viết, thiết lập các biến môi trường thường được sử dụng cho proxy. Cách sử dụng rất đơn giản:

  1. Biên dịch nó với xCode.
  2. Thêm vào:

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

    để bạn .profile, .bashrchoặc .bash_profile.

Sau đó bạn có thể sử dụng các biến như $HTTP_PROXY, $http_proxy, $HttpProxy, vv cho tất cả các giao thức (HTTP, FTP, SOCKS) bao gồm các $NO_PROXYtrường hợp ngoại lệ. Công cụ này sẽ hoạt động với hầu hết các công cụ CLI và nhận các cài đặt từ bảng điều khiển OS X.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.