Skip to content

Instantly share code, notes, and snippets.

@ismdeep
Created July 20, 2020 15:24
Show Gist options
  • Save ismdeep/e3c4fb820206d796b3345550272f7d1c to your computer and use it in GitHub Desktop.
Save ismdeep/e3c4fb820206d796b3345550272f7d1c to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import os
import sys
from prettytable import PrettyTable
from colorama import Fore, Back, Style
def show_help_msg():
print('''Usage: proxy [on [pac]|off|status]''')
def parse_val(lines, left_keys):
for line in lines:
if line.find(left_keys) >= 0:
return line[line.find(left_keys) + len(left_keys):].strip()
return ''
def get_active_network_name_list():
tmp_lines = os.popen('''current-network-name''').readlines()
network_name_list = []
for tmp_line in tmp_lines:
network_name_list.append(tmp_line.strip())
return network_name_list
def enable_proxy(pac_flag=False):
networks = get_active_network_name_list()
for network in networks:
if pac_flag:
os.system('''networksetup -setautoproxyurl "%s" "http://pac.local/pac/whitelist.pac"''' % network)
os.system('''networksetup -setautoproxystate "%s" on''' % network)
else:
os.system('''networksetup -setautoproxystate "%s" off''' % network)
os.system('''networksetup -setsocksfirewallproxy "%s" 127.0.0.1 1080''' % network)
print('%s %s' % (network, Fore.GREEN + 'Enabled' + Fore.RESET))
def disable_proxy():
networks = get_active_network_name_list()
for network in networks:
os.system('''networksetup -setautoproxystate "%s" off''' % network)
os.system('''networksetup -setsocksfirewallproxystate "%s" off''' % network)
print('%s %s' % (network, Fore.RED + 'Disabled' + Fore.RESET))
def show_status():
networks = get_active_network_name_list()
status_table = PrettyTable(field_names=['Service Name', 'Enabled', 'Server', 'Port', 'Pac Enabled'])
for network in networks:
lines = os.popen('''networksetup -getsocksfirewallproxy "%s"''' % network).readlines()
enabled = parse_val(lines, 'Enabled:')
if enabled == 'Yes':
enabled = Fore.GREEN + enabled + Fore.RESET
else:
enabled = Fore.RED + enabled + Fore.RESET
server = parse_val(lines, 'Server:')
port = parse_val(lines, 'Port:')
lines = os.popen('''networksetup -getautoproxyurl "%s"''' % network).readlines()
pac_enabled = parse_val(lines, 'Enabled:')
if pac_enabled == 'Yes':
pac_enabled = Fore.GREEN + pac_enabled + Fore.RESET
else:
pac_enabled = Fore.RED + pac_enabled + Fore.RESET
status_table.add_row([network, enabled, server, port, pac_enabled])
print(status_table)
def main():
if len(sys.argv) <= 1:
show_help_msg()
exit(-1)
if sys.argv[1] == 'status':
show_status()
exit(0)
if sys.argv[1] == 'on':
if len(sys.argv) == 2:
enable_proxy(False)
exit(0)
if sys.argv[2] == 'pac':
enable_proxy(True)
exit(0)
if sys.argv[1] == 'off':
disable_proxy()
exit(0)
show_help_msg()
exit(-1)
if __name__ == '__main__':
main()
@ismdeep
Copy link
Author

ismdeep commented Jul 20, 2020

Usage

Usage: proxy [on [pac]|off|status]

Show Proxy Status

$ proxy status

Enable Proxy without Pac Mode

$ proxy on

Enable Porxy with Pac Mode

$ proxy on pac

Disable Porxy

$ proxy off

@ismdeep
Copy link
Author

ismdeep commented Jul 20, 2020

current-network-name

#!/bin/bash

while read -r line; do
    sname=$(echo "$line" | awk -F  "(, )|(: )|[)]" '{print $2}')
    sdev=$(echo "$line" | awk -F  "(, )|(: )|[)]" '{print $4}')
    #echo "Current service: $sname, $sdev, $currentservice"
    if [ -n "$sdev" ]; then
        ifout="$(ifconfig "$sdev" 2>/dev/null)"
        echo "$ifout" | grep 'status: active' > /dev/null 2>&1
        rc="$?"
        if [ "$rc" -eq 0 ]; then
            currentservice="$sname"
            currentdevice="$sdev"
            currentmac=$(echo "$ifout" | awk '/ether/{print $2}')
            # may have multiple active devices, so echo it here
            echo "$currentservice"
        fi
    fi
done <<< "$(networksetup -listnetworkserviceorder | grep 'Hardware Port')"

if [ -z "$currentservice" ]; then
    >&2 echo "Could not find current service"
    exit 1
fi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment