import ctypes
import getpass
import platform
import re
from subprocess import PIPE, Popen
def ecmd(command):
    class disable_file_system_redirection:
        _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
        _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
        def __enter__(self):
            self.old_value = ctypes.c_long()
            self.success = self._disable(ctypes.byref(self.old_value))
        def __exit__(self, type, value, traceback):
            if self.success:
                self._revert(self.old_value)

    with disable_file_system_redirection():
        obj = Popen(command, shell = True, stdout = PIPE, stderr = PIPE)
    out, err = obj.communicate()
    ret=obj.returncode
    if ret==0:
        if out:
            return out.strip()
        else:
            return ret
    else:
        if err:
            return err.strip()
        else:
            return ret

print "User Name: ",getpass.getuser()
print "\n"
print "Host Name: ",platform.node()
print "\n"
print "OS Version: %s %s"%(platform.system(),platform.release())
print "\n"
print "CPU: ",platform.processor()
print "\n"
print "Memory:"
memory = ecmd(r'systeminfo | findstr /c:"Total Physical Memory" /c:"Available Physical Memory"')
print memory
print "\n"

def get_interfaces():
    output = ecmd(r'ipconfig /all')

    lines = output.splitlines()
    lines = filter(lambda x: x, lines)

    ip_address = ''
    subnet_mask = ''
    default_gateway = ''
    name = ''

    for line in lines:
        # -------------
        # Interface Name

        is_interface_name = re.match(r'^[a-zA-Z0-9].*:$', line)
        if is_interface_name:
            
            # Check if there's previews values, if so - yield them
            if name and ip_address:
                yield {
                    "ip_address": ip_address,
                    "subnet_mask": subnet_mask,
                    "default_gateway": default_gateway,
                    "name": name,
                    }

            ip_address = ''
            subnet_mask = ''
            default_gateway = ''
            name = line.rstrip(':')

        line = line.strip().lower()

        if ':' not in line:
            continue

        value = line.split(':')[-1]
        value = value.strip()

        is_ip_address = not ip_address and re.match(r'ipv4 address|autoconfiguration ipv4 address|ip address', line)

        if is_ip_address:
            ip_address = value
            ip_address = ip_address.replace('(preferred)', '')
            ip_address = ip_address.strip()

        is_subnet_mask = not subnet_mask and re.match(r'subnet mask', line)
        if is_subnet_mask:
            subnet_mask = value
            subnet_mask = subnet_mask.strip()

        is_default_gateway = not default_gateway and re.match(r'default gateway', line)
        if is_subnet_mask:
            default_gateway = value
            default_gateway = default_gateway.strip()

        
    if name and ip_address:
        yield {
            "ip_address": ip_address,
            "subnet_mask": subnet_mask,
            "default_gateway": default_gateway,
            "name": name,
            }


if __name__ == '__main__':
    for interface in get_interfaces():
        if interface.get('name') == 'Wireless LAN adapter Wi-Fi':
            print "Wireless LAN adapter Wi-Fi:"
            print "IP Address:",interface.get('ip_address')
            print "Subnet Mask:",interface.get('subnet_mask')
            print "Gateway:", interface.get('default_gateway')
            print "\n"

cmd = ecmd(r'ipconfig')
ipaddress=re.findall('IPv4 Address(.*)',cmd)
mask=re.findall('Subnet Mask(.*)',cmd)
gateway=re.findall('Default Gateway(.*)',cmd)
print "Ethernet adapter Ethernet:"
print "IP Address:", " ".join(ipaddress[0].split(':')[1].split()) if len(ipaddress) else ''
print "Subnet Mask:", " ".join(mask[0].split(':')[1].split())if len(mask) else ''
print "Gateway:", " ".join(gateway[0].split(':')[1].split()) if len(gateway) else ''
