Регистрация логов контроля доступа в VB .NET - PullRequest
0 голосов
/ 18 января 2019

Я новичок в VB .NET, я хочу написать метод, который сохраняет новую запись в базе данных каждый раз, когда кто-то пытается войти в систему, независимо от того, является ли это успешной или неудачной попыткой. Также мне нужно захватить IP-адрес машины, на которой выполняется попытка. Любой совет, с чего начать

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы можете попробовать что-то вроде этого для базы данных MySQL

Imports MySql.Data.MySqlClient
Imports System.Data.Sql
Imports System
Imports System.Data

Public Class LoginForm

    'These variables store information regarding the sql connection string, and the sql class callers.
    Dim connectionString As String = "Server=localhost; User Id=admin; Password=pass; Database=access_logs"
    Dim SQLConnection As MySqlConnection = New MySqlConnection

    Private Sub LoginButton_Click(sender As Object, e As EventArgs) Handles LoginButton.Click
        Dim username As String = "usernametextbox.text"
        Dim ip_address As String = ipfetchfunction()
        Dim status As String = Nothing

        If username.ToString() = "valid" And Password.ToString() = "valid" Then
            status = "authorized"
        Else
            status = "failed"
        End If

        LogAttempt(username, ip_address, status)
    End Sub

    Public Function LogAttempt(user_name As String, ip_address As String, login_status As String) As Boolean
        SQLConnection = New MySqlConnection()
        SQLConnection.ConnectionString = connectionString
        Dim sqlCommand As New MySqlCommand
        Dim str_logSql As String

        Try
            str_logSql = "insert into access_log (username, user_ip, login_status) values ('" + user_name + "','" + ip_address + "','" + login_status + "')"
            'MsgBox(str_logSql) uncomment for debugging
            sqlCommand.Connection = SQLConnection
            sqlCommand.CommandText = str_logSql 
            sqlCommand.ExecuteNonQuery()

            Return True
        Catch ex As Exception
            Return False
            'MessageBox.Show(ex.ToString()) Uncomment for debugging
        End Try
    End Function
End Class
0 голосов
/ 19 января 2019

Я не верю, что захват ip можно выполнить локально без библиотеки, но если вы не возражаете против вызова API, вы можете использовать ip-api.com

'Query location data
Dim Req As HttpWebRequest
Dim Ret As HttpWebResponse = Nothing
Dim SR As StreamReader
Req = DirectCast(WebRequest.Create("http://ip-api.com/json"), HttpWebRequest)
Ret = DirectCast(Req.GetResponse(), HttpWebResponse)
SR = New StreamReader(Ret.GetResponseStream())
Dim Raw As String = Nothing
Raw = SR.ReadToEnd()
Dim JavaScriptSerialization As New JavaScriptSerializer()
Dim ipdata_object As New IPData()

ipdata_object = JavaScriptSerialization.Deserialize(Raw, ipdata_object.GetType)
dim ip_address as string = ipdata_object.query.tostring()

Класс IPData

'IP Data API Deserialization classes for http://ip-api.com/json API response
<Serializable>
Class IPData
    Public asinfo As String
    Public city As String
    Public country As String
    Public countryCode As String
    Public isp As String
    Public lat As String
    Public lon As String
    Public org As String
    Public query As String
    Public region As String
    Public regionName As String
    Public status As String
    Public timezone As String
    Public zip As String
End Class

Что касается ведения журнала, в зависимости от того, что вы хотите использовать, Mysql, CSV, Flatfile и т. Д.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'SAVE FUNCTION
    Dim LogString as String = "User " + Username + " Attempted to login from " + ip_address + " Successfully/Failed"

    My.Computer.FileSystem.WriteAllText("C://testfile.txt", inputString, True)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...