65.9K
CodeProject 正在变化。 阅读更多。
Home

IP 日志记录器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.31/5 (8投票s)

2009 年 2 月 15 日

CPOL

1分钟阅读

viewsIcon

41821

downloadIcon

306

这个程序会跟踪您不断变化的IP地址。

引言

我的互联网服务提供商给我一个静态IP地址,但会不断更改它。这使得我很难从工作场所远程访问我的家用电脑。这个简单的程序旨在解决跟踪您不断变化的IP地址的问题。

Using the Code

这个程序由两个组件组成

  1. 一个 ASP 页面 (IpLogger.aspx),它会将您的当前 IP 记录到 SQL 数据库中。该页面还会显示您的当前 IP。该页面必须部署到可公开访问的服务器上。IpLogger.aspx.vb 页面的代码背后有一个名为 GetConnectionString() 的函数,它指向存储 IP 日志信息的数据库。可以使用此文件创建数据库:Schema.sql
  2. 一个 Windows 脚本文件。该脚本将定期访问 ASP 页面。它必须在您的家用电脑上使用 Windows 计划任务进行安排。脚本文件使用以下 URL 保存 IP:http://<myservername>/MyServer/IpLogger.aspx?server=server1&save=1

要查看您当前的 IP 地址和历史记录,请在浏览器中打开此页面:http://<myservername>/MyServer/IpLogger.aspx?server=server1

数据库架构

CREATE DATABASE IpLogger
GO

USE IpLogger
GO

CREATE TABLE [dbo].[IpLog] (
    [LogId] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY  CLUSTERED,
    [IpAddress] [varchar] (50) NOT NULL ,
    [ServerName] [varchar] (50) NULL ,
    [AccessTime] [datetime] NOT NULL DEFAULT (getdate())
) ON [PRIMARY]
GO

IpLogger.aspx.vb 页面的代码背后

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
	Handles Me.Load

    If Request.QueryString("save") <> "" Then
        SaveIP(Request.QueryString("server"))
        Response.Write("OK")
        Response.End()
    ElseIf Request.QueryString("delete") <> "" Then
        DeleteServer(Request.QueryString("server"))
        Response.Write("OK")
        Response.End()
    End If

    Dim sSql As String = "SELECT IpAddress, MIN(AccessTime) AS _
			EffectiveOn FROM IpLog " & _
                         " WHERE ServerName = '" & 
			Request.QueryString("server") & "'" & _
                         " GROUP BY IpAddress ORDER BY IpAddress DESC"
    GridView1.DataSource = GetDataReader(sSql)
    GridView1.DataBind()

End Sub

Private Sub DeleteServer(ByVal sServerName As String)
    Dim sSql As String = "DELETE FROM IpLog WHERE ServerName = '" & sServerName & "'"
    ExecuteCommand(sSql)
End Sub

Private Sub SaveIP(ByVal sServerName As String)
    Dim sId As String = Request.ServerVariables("remote_addr")
    Dim sSql As String = "INSERT INTO IpLog _
	(IpAddress, ServerName) VALUES ('" & sId & "', '" & sServerName & "')"
    ExecuteCommand(sSql)
End Sub

Private Function GetDataReader(ByVal sSql As String) As OleDbDataReader
    Dim sConnection As String = GetConnectionString() 
    Dim cn As New OleDbConnection(sConnection)
    Dim cmd As New OleDbCommand(sSql, cn)
    cn.Open()
    Try
        Return cmd.ExecuteReader(Data.CommandBehavior.CloseConnection)
    Catch ex As Exception
        Throw New Exception(ex.Message & "

SQL: " & Replace(sSql, vbCrLf, "
"))
    End Try
End Function

Private Sub ExecuteCommand(ByVal sSql As String)
    Dim cn As New OleDbConnection(GetConnectionString())
    Dim cmd As New OleDbCommand(sSql, cn)
    cn.Open()

    Try
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        Throw New Exception(ex.Message & "; SQL: " & sSql)
    End Try

    cn.Close()
End Sub

Private Function GetConnectionString() As String
    Return "Provider=SQLOLEDB.1;Password=xxxxx;_
	Persist Security Info=True;User ID=sa;Initial Catalog=IpLogger;Data Source=."
End Function

Windows 脚本文件:LogIP.vbs

'To View IP History in browser http://MyServer/IpLogger/Default.aspx?server=server1

'To Save IP
GetUrlData "http://MyServer/IpLogger/Default.aspx?server=server1&save=1"

Function GetUrlData(sUrl)
    Dim oHttp
    Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
    oHttp.setTimeouts 0, 0, 0, 0
    
    oHttp.Open "GET", sUrl, False
    oHttp.send
    GetUrlData = oHttp.responseText
    Set oHttp = Nothing
End Function

历史

  • 2009年2月15日:初始发布
© . All rights reserved.