#!/usr/bin/env python3

import argparse
import socket
import struct

version='0.0.2'

def get_default_gateway_linux(ip=False, dev=True):
    """Read the default gateway interface directly from /proc."""
    with open("/proc/net/route") as fh:
        for line in fh:
            fields = line.strip().split()
            if fields[1] != '00000000' or not int(fields[3], 16) & 2:
                # If not default route or not RTF_GATEWAY, skip it
                continue
            if dev:
                return fields[0]
            elif ip:
                # https://stackoverflow.com/questions/2197974/convert-little-endian-hex-string-to-ip-address-in-python
                addr_long = int(fields[2], 16)
                return socket.inet_ntoa(struct.pack("<L", addr_long))  # '192.168.0.2'


def get_args():
    parser = argparse.ArgumentParser(description='Get Default IP tool')
    parser.add_argument('--ip', default=True, action='store_true', help='Get def gw IP (router IP)')
    parser.add_argument('--dev', default=False, action='store_true', help='Get local def gw interface')
    
    return parser.parse_args()

def main():
    args = get_args()
    print(get_default_gateway_linux(ip = args.ip, dev=args.dev))


if __name__ == '__main__':
    main()