Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion SWProxy.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,28 @@ def priority(ip):
return sockets[0]


def get_external_ip_v2():
""" returns None if no ip was detected via this method """
try:
return ip4_addresses()[0]
except IndexError:
return None


def ip4_addresses():
from netifaces import interfaces, ifaddresses, AF_INET
ip_list = []
for interface in interfaces():
try:
for link in ifaddresses(interface)[AF_INET]:
ip_list.append(link['addr'])
except KeyError:
continue
if '127.0.0.1' in ip_list:
ip_list.remove('127.0.0.1')
return ip_list


def read_file_lines(fpath):
try:
fpath = resource_path(fpath)
Expand Down Expand Up @@ -170,7 +192,14 @@ def resource_path(relative_path):

def start_proxy_server(options):

my_ip = get_external_ip()
my_ip = get_external_ip_v2() if options.ipdetect2 else get_external_ip()

if not my_ip:
# failed to find ip, give them another option
if options.ipdetect2:
raise Exception('Unable to detect ip address, perhaps remove --ipdetect2')
else:
raise Exception('Unable to detect ip address, perhaps try --ipdetect2')

try:
print "Running Proxy server at {} on port {}".format(my_ip, options.port)
Expand All @@ -185,6 +214,7 @@ def start_proxy_server(options):
parser.add_argument('-d', '--debug', action="store_true", default=False)
parser.add_argument('-g', '--no-gui', action="store_true", default=False)
parser.add_argument('-p', '--port', type=int, help='Port number', default=8080, nargs='+')
parser.add_argument('--ipdetect2', action="store_true", help='Use our v2 IP detection')
options = parser.parse_args()

# Set up logger
Expand Down
5 changes: 3 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pycrypto
dpkt
pycrypto
dpkt
yapsy
netifaces