예제 #1
0
파일: SoftAP.cs 프로젝트: wisexie/Tool
        /// <summary>
        /// Query a status of Software Access Point
        /// </summary>
        /// <returns>A construct with status of the AP</returns>
        public HostedNetworkStatus getStatus()
        {
            var addressList = GetListArp();

            IntPtr ppStatus = IntPtr.Zero;

            lastErrorCode = (int)NativeWLanAPI.WlanHostedNetworkQueryStatus(handle, out ppStatus, IntPtr.Zero);

            checkStatusAndThrow("Could not retrive SoftAP status", false);

            NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS qstat = (NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS)Marshal.PtrToStructure(ppStatus, typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS));

            bool   isActive       = qstat.HostedNetworkState == NativeWLanAPI._WLAN_HOSTED_NETWORK_STATE.wlan_hosted_network_active ? true : false;
            int    peersConnected = (int)qstat.dwNumberOfPeers;
            Guid   guid           = qstat.IPDeviceID;
            string networkMac     = BitConverter.ToString(qstat.wlanHostedNetworkBSSID.address);//网卡地址
            LinkedList <HostedNetworkPeer> peers = new LinkedList <HostedNetworkPeer>();

            IntPtr offset = Marshal.OffsetOf(typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_STATUS), "PeerList");

            for (int i = 0; i < peersConnected; i++)
            {
                IntPtr ppeer = new IntPtr(ppStatus.ToInt64() + offset.ToInt64());
                NativeWLanAPI._WLAN_HOSTED_NETWORK_PEER_STATE peer = (NativeWLanAPI._WLAN_HOSTED_NETWORK_PEER_STATE)Marshal.PtrToStructure(ppeer, typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_PEER_STATE));

                string mac           = BitConverter.ToString(peer.PeerMacAddress.address);
                bool   authenticated = ((int)peer.PeerAuthState == 1 ? true : false);
                string ipAddress     = addressList.LastOrDefault(x => string.Equals(x.MacAddress, mac, StringComparison.CurrentCultureIgnoreCase))?.IpAddress;

                HostedNetworkPeer hpeer = new HostedNetworkPeer(mac, authenticated, DnsHelper.GetHostName(ipAddress), ipAddress);

                peers.AddLast(hpeer);

                offset += Marshal.SizeOf(peer);
            }

            NativeWLanAPI.WlanFreeMemory(ppStatus);

            return(new HostedNetworkStatus(isActive, guid, peersConnected, peers, networkMac));
        }
예제 #2
0
파일: SoftAP.cs 프로젝트: wisexie/Tool
        /// <summary>
        /// Queries the settings of Software Access Point
        /// </summary>
        /// <returns>Current settings of the AP</returns>
        public HostedNetworkSettings getSettings()
        {
            UInt32 pdwDataSize = new UInt32();
            IntPtr ppvData     = IntPtr.Zero;

            NativeWLanAPI._WLAN_OPCODE_VALUE_TYPE     pWlanOpcodeValueType = new NativeWLanAPI._WLAN_OPCODE_VALUE_TYPE();
            NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE opcode = NativeWLanAPI._WLAN_HOSTED_NETWORK_OPCODE._WLAN_HOSTED_NETWORK_OPCODE_connection_settings;

            lastErrorCode = (int)NativeWLanAPI.WlanHostedNetworkQueryProperty(handle, opcode, out pdwDataSize, out ppvData, out pWlanOpcodeValueType, IntPtr.Zero);

            checkStatusAndThrow("Could not get network settings at this time");

            NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS qsettings = (NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS)Marshal.PtrToStructure(ppvData, typeof(NativeWLanAPI._WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS));

            int    maxPeers = (int)qsettings.dwMaxNumberOfPeers;
            string ssid     = qsettings.hostedNetworkSSID.ucSSID;
            string password = getPassword();

            NativeWLanAPI.WlanFreeMemory(ppvData);

            return(new HostedNetworkSettings(ssid, password, maxPeers));
        }
예제 #3
0
파일: SoftAP.cs 프로젝트: wisexie/Tool
        private string getPassword()
        {
            string pass = string.Empty;
            bool   persistent;
            bool   passphrase;
            uint   length;
            IntPtr ppass = IntPtr.Zero;

            int error = (int)NativeWLanAPI.WlanHostedNetworkQuerySecondaryKey(handle, out length, out ppass, out passphrase, out persistent, out lastError, IntPtr.Zero);

            if (error != 0)
            {
                throw new ApplicationException("Retriving password failed!");
            }
            else
            {
                if (length != 0 && ppass != IntPtr.Zero)
                {
                    pass = Marshal.PtrToStringAnsi(ppass, (int)length);
                    NativeWLanAPI.WlanFreeMemory(ppass);
                }
            }
            return(pass);
        }