在 VB .NET 中记录访问控制日志



我是VB .NET的新手,我想编写一种方法,每次有人尝试登录时都会将新条目保存到数据库中,无论尝试是成功还是失败。我还需要捕获执行尝试的机器的 IP 地址。关于从哪里开始的任何建议

我不相信可以在没有库的情况下在本地完成捕获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

你可以为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

最新更新