Как заставить программу на c ++ работать как портал с подключением к Wi-Fi - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь разработать программу, которая контролирует аутентификацию WiFi. Моя идея заключалась в том, что программа должна иметь возможность видеть каждое устройство, которое запрашивает соединение WiFi, и получать IP-адрес устройства и адрес ma c. После захвата адреса ma c и IP-адреса они должны быть отправлены в систему администрирования WiFi, и администратор должен иметь возможность решить, разрешить или запретить доступ к этому устройству. Я пытался найти код, который может получить IP и c адреса устройств, подключенных к моей сети, но я получил vb-код

Imports System.Net
Imports System.Net.NetworkInformation
Imports System.Net.Sockets

Public Class Form2

    Structure IpInfo
        Dim IpAddress As String
        Dim HostName As String
        Dim MacAddress As String
    End Structure

    Dim connectedIPAddresses As New List(Of IpInfo)

    Private Shared Function NetworkGateway() As String
        Dim ip As String = Nothing
        For Each f As NetworkInterface In NetworkInterface.GetAllNetworkInterfaces()
            If f.OperationalStatus = OperationalStatus.Up Then
                For Each d As GatewayIPAddressInformation In f.GetIPProperties().GatewayAddresses
                    ip = d.Address.ToString()
                Next
            End If
        Next
        Return ip
    End Function

    Public Sub Ping_all()
        Dim gate_ip As String = NetworkGateway()
        Dim array As String() = gate_ip.Split("."c)
        For i As Integer = 2 To 255
            Dim ping_var As String = array(0) & "." & array(1) & "." & array(2) & "." & i.ToString
            Ping(ping_var, 1, 1000)
        Next
        Task.WhenAll(taskList)
    End Sub

    Dim taskList As New List(Of Task)

    Public Sub Ping(ByVal host As String, ByVal attempts As Integer, ByVal timeout As Integer)
        For i As Integer = 0 To attempts - 1
            taskList.Add(Task.Run(Sub()
                                      Try
                                          Dim ping As System.Net.NetworkInformation.Ping = New System.Net.NetworkInformation.Ping()
                                          AddHandler ping.PingCompleted, AddressOf 
                                          ping.SendAsync(host, timeout, host)
                                      Catch
                                      End Try
                                  End Sub))
        Next

    End Sub

    Private Sub PingCompleted(ByVal sender As Object, ByVal e As PingCompletedEventArgs)
        Dim ip As String = CStr(e.UserState)
        If e.Reply IsNot Nothing AndAlso e.Reply.Status = IPStatus.Success Then
            Dim hostname As String = GetHostName(ip)
            Dim macaddres As String = GetMacAddress(ip)
            Dim newIpAddress As IpInfo
            newIpAddress.IpAddress = ip
            newIpAddress.MacAddress = macaddres
            newIpAddress.HostName = hostname
            connectedIPAddresses.Add(newIpAddress)
        Else
        End If
    End Sub

    Public Function GetHostName(ByVal ipAddress As String) As String
        Try
            Dim entry As IPHostEntry = Dns.GetHostEntry(ipAddress)
            If entry IsNot Nothing Then
                Return entry.HostName
            End If
        Catch __unusedSocketException1__ As SocketException
        End Try

        Return Nothing
    End Function

    Public Function GetMacAddress(ByVal ipAddress As String) As String
        Dim macAddress As String = String.Empty
        Dim Process As System.Diagnostics.Process = New System.Diagnostics.Process()
        Process.StartInfo.FileName = "arp"
        Process.StartInfo.Arguments = "-a " & ipAddress
        Process.StartInfo.UseShellExecute = False
        Process.StartInfo.RedirectStandardOutput = True
        Process.StartInfo.CreateNoWindow = True
        Process.Start()
        Dim strOutput As String = Process.StandardOutput.ReadToEnd()
        Dim substrings As String() = strOutput.Split("-"c)
        If substrings.Length >= 8 Then
            macAddress = substrings(3).Substring(Math.Max(0, substrings(3).Length - 2)) & "-" & substrings(4) & "-" & substrings(5) & "-" & substrings(6) & "-" & substrings(7) & "-" + substrings(8).Substring(0, 2)
            Return macAddress
        Else
            Return "OWN Machine"
        End If
    End Function

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Ping_all()
        Threading.Thread.Sleep(10000)
        For Each ip As IpInfo In connectedIPAddresses
            ListBox1.Items.Add(ip.IpAddress)
        Next
    End Sub
End Class

кто-то сказал мне, что вам нужно изучить программирование сокетов, и я сделал что я попытался создать сервер сокетов на C ++ и клиент сокета, который клиент сокета успешно подключается к серверу сокетов и может отправлять эхо-сообщения обратно клиенту. но я не знаю, как это может помочь мне в том, чего я хочу достичь. Я думал, что, может быть, получить информацию о клиенте, когда клиент создает соединение, и если он не должен подключаться, отключиться, если я могу это сделать.

основная проблема заключается в том, что я не знаю, могу ли я использовать этот сокет-сервер для управления аутентификацией Wi-Fi, и если да, то как я могу поместить его между клиентским устройством и Wi-Fi, чтобы он действовал как захватывающий портал для перенаправления каждого клиентское устройство, которое хочет подключиться к администратору WiFi.

любая помощь будет принята с благодарностью, области, которые больше всего беспокоят:

- как заставить мою программу работать как скрытый портал чтобы иметь возможность перенаправлять устройства, которым необходимо подключение к WiFi admin

  • может ли сервер сокетов выполнять такую ​​задачу заранее благодарим всех, кто помогает
...