import ctypes

# Load the Wininet library
wininet = ctypes.windll.wininet

# Define the flags
INTERNET_CONNECTION_MODEM = 0x01
INTERNET_CONNECTION_LAN = 0x02
INTERNET_CONNECTION_PROXY = 0x04
INTERNET_CONNECTION_OFFLINE = 0x20
INTERNET_CONNECTION_CONFIGURED = 0x40

def interpret_flags(flags):
    states = []
    if flags & INTERNET_CONNECTION_MODEM:
        states.append("Modem")
    if flags & INTERNET_CONNECTION_LAN:
        states.append("LAN")
    if flags & INTERNET_CONNECTION_PROXY:
        states.append("Proxy")
    if flags & INTERNET_CONNECTION_OFFLINE:
        states.append("Offline")
    if flags & INTERNET_CONNECTION_CONFIGURED:
        states.append("Configured")
    return states

def get_connection_state():
    flags = ctypes.c_ulong()
    result = wininet.InternetGetConnectedState(ctypes.byref(flags), 0)
    return result, flags.value

result, flags = get_connection_state()
if result:
    print("Connected to the internet")
    print("Connection types:", interpret_flags(flags))
else:
    print("Not connected to the internet")
    print("Connection types:", interpret_flags(flags))