modglobal.bas

来自「用VB写的一个代理服务器程序.rar复件 用VB写的一个代理服务器程序.rar」· BAS 代码 · 共 239 行

BAS
239
字号
Attribute VB_Name = "modGlobal"
Option Explicit

Public Sub Main()
    If (App.PrevInstance = False) Then
        frmMain.Show
    End If
End Sub

Public Function IsHTTPHeader(Data As String) As Boolean
'判断是否为HTTP请求头
    Const HEADER_HTTP = "HTTP"
    Const METHOD_GET = "GET"
    Const METHOD_POST = "POST"
    Const METHOD_HEAD = "HEAD"
    Const METHOD_PROPFIND = "PROPFIND"
    Const METHOD_OPTION = "OPTIONS"
    Const METHOD_CONNECT = "CONNECT"
    Dim lpos As Long, Method As String

    lpos = InStr(1, Data, " ", vbTextCompare)
    If lpos <> 0 Then
        Method = UCase(Left$(Data, lpos - 1))
        Select Case Method
            Case HEADER_HTTP, METHOD_GET, METHOD_POST, _
                 METHOD_HEAD, METHOD_PROPFIND, METHOD_OPTION, _
                 METHOD_CONNECT
                 IsHTTPHeader = True
        End Select
    End If
End Function
'生成包含验证信息的头(header)
Public Function GenerateAuthorizationHeader(Header As String, _
        ProxyAuthorizationString As String) As String
    
    Dim tmpString As String, AuthorizationString As String

    tmpString = Header
    
    If InStr(ProxyAuthorizationString, "Proxy-Authorization") <> 0 Then
        '找到"Proxy-Authorization"字样
        tmpString = DeleteHttpHeader(tmpString, "Proxy-Connection")
        tmpString = DeleteHttpHeader(tmpString, "Proxy-Authorization")
        '添加"Proxy-Connection: Keep-Alive"
        AuthorizationString = "Proxy-Connection: Keep-Alive" & vbCrLf
    Else
        '未找到
        tmpString = DeleteHttpHeader(tmpString, "Connection")
        tmpString = DeleteHttpHeader(tmpString, "WWW-Authorization")
        '添加"Proxy-Connection: Keep-Alive"
        AuthorizationString = "Connection: Keep-Alive" & vbCrLf
    End If
    
    AuthorizationString = AuthorizationString & ProxyAuthorizationString
    tmpString = Replace(tmpString, vbCrLf, vbCrLf & AuthorizationString, 1, 1)
    GenerateAuthorizationHeader = tmpString
End Function

'删除头中的某段信息
Public Function DeleteHttpHeader(Header As String, HeaderCaption As String) As String
    Dim lpos As Long
    Dim endpos As Long
    Dim HeaderData As String
    '寻找信息
    lpos = InStr(1, Header, HeaderCaption & ":", vbTextCompare)
    If lpos <> 0 Then
        '信息结束处
        endpos = InStr(lpos + 1, Header, vbCrLf, vbTextCompare)
        HeaderData = Mid$(Header, lpos, endpos - lpos)
        DeleteHttpHeader = Replace(Header, HeaderData & vbCrLf, "", 1, 1, vbTextCompare)
    Else
        DeleteHttpHeader = Header
    End If
    
End Function

'向头中添加信息
Public Function AddHttpHeader(Header As String, HeaderCaption As String, HeaderValue As String) As String
    Dim lpos As Long
    Dim endpos As Long
    Dim HeaderData As String
    '寻找标识
    lpos = InStr(1, Header, HeaderCaption & ":", vbTextCompare)
    If lpos <> 0 Then
        endpos = InStr(lpos + 1, Header, vbCrLf, vbTextCompare)
        HeaderData = Mid$(Header, lpos, endpos - lpos)
        '添加信息
        AddHttpHeader = Replace(Header, HeaderData & vbCrLf, _
                        HeaderCaption & ": " & HeaderValue _
                        & vbCrLf, 1, 1, vbTextCompare)
    Else
        AddHttpHeader = Replace(Header, vbCrLf, vbCrLf & _
                        HeaderCaption & ": " & HeaderValue & _
                        vbCrLf, 1, 1, vbTextCompare)
    End If
    
End Function

'过滤请求头中的某些标识
Public Function FilterRequestHeader(Header As String) As String
    
    Dim tmpString As String

    tmpString = Header
    If Filter_Reload Then
        '添加/更改变量的值
        tmpString = AddHttpHeader(tmpString, "Pragma", "no-cache")
        tmpString = AddHttpHeader(tmpString, "Cache-Control", "no-cache")
    End If
    
    If Filter_Disable_Cookie Then
        '删除Cookie相关信息
        tmpString = DeleteHttpHeader(tmpString, "Cookie")
    End If
    
    If Filter_Hide_UserAgent Then
        '用户代理
        If UserAgent <> "" Then
            tmpString = AddHttpHeader(tmpString, "User-Agent", UserAgent)
        Else
            tmpString = AddHttpHeader(tmpString, "User-Agent", C_USER_AGENT_PPS)
        End If
    End If
    
    If Not UseProxy And Left(LCase(GetResource(Header)), Len("http://" & LCase(GetHttpHeader(Header, "Host")) & "/")) = "http://" & LCase(GetHttpHeader(Header, "Host")) & "/" Then
        '是否使用代理服务器
        tmpString = Replace(tmpString, "http://" & LCase(GetHttpHeader(Header, "Host")) & "/", "/")
    End If
    
    FilterRequestHeader = tmpString
End Function

Public Function GetResource(Header As String) As String
Dim lpos As Long, tmpString As String
Dim Methode As String, Resource As String, Version As String

    tmpString = Header
    tmpString = GetToken(tmpString, vbCrLf)
    tmpString = tmpString & " "
    Methode = GetToken(tmpString, " ")
    Resource = GetToken(tmpString, " ")
    Version = GetToken(tmpString, " ")
    
    GetResource = Resource
End Function

'过滤响应头中某些信息
Public Function FilterResponseHeader(Header As String) As String
Dim tmpString As String

    tmpString = Header
    If Filter_Hide_Server Then
        '隐藏服务器信息
        If PersonalProxyName <> "" Then
            tmpString = AddHttpHeader(tmpString, "Server", PersonalProxyName)
        Else
            tmpString = AddHttpHeader(tmpString, "Server", C_PERSONAL_PROXY)
        End If
    End If
    If Filter_Hide_Proxy Then
        '隐藏代理服务器信息
        If LocalComputerName <> "" Then
            tmpString = AddHttpHeader(tmpString, "Via", LocalComputerName)
        Else
            tmpString = DeleteHttpHeader(tmpString, "Via")
        End If
    End If
    If Filter_Disable_Cookie Then
        '禁止cookie
        tmpString = DeleteHttpHeader(tmpString, "Set-Cookie")
    End If
    
    FilterResponseHeader = tmpString
End Function

'获取HTTP头(header)
Public Function GetHttpHeader(Header As String, HeaderCaption As String) As String
    Dim lpos As Long
    Dim endpos As Long
    Dim HeaderData As String
    '寻找开始位置
    lpos = InStr(1, Header, HeaderCaption & ":", vbTextCompare)
    If lpos <> 0 Then
        '结束位置
        endpos = InStr(lpos + 1, Header, vbCrLf, vbTextCompare)
        HeaderData = Mid$(Header, lpos + Len(HeaderCaption) + 2, endpos - (lpos + Len(HeaderCaption) + 2))
    End If
    GetHttpHeader = HeaderData
    
End Function

Public Function IsInUserCollection(Col As Collection, Key As String) As Boolean
Dim i As Long
    
    For i = 1 To Col.Count
        If GetUser(Col(i).Key) = GetUser(Key) And GetPassword(Col(i).Key) = GetPassword(Key) Then
            IsInUserCollection = True
            Exit For
        End If
    Next i
End Function

Public Function IsInCollection(Col As Collection, Key As String) As Boolean
'*** Note : do not set the ide to break on all error but use break on unhandled error
'***        or the this checking won't work
Dim i As Long

    On Error GoTo errHandler
    
    If Col(Key).Key = Key Then
        IsInCollection = True
    End If
    Exit Function
    
errHandler:
End Function

'获取令牌
Public Function GetToken(sData As String, Delimiter As String) As String
    Dim tmpString As String, lpos As Long
    '寻找分隔符
    lpos = InStr(1, sData, Delimiter, vbTextCompare)
    If lpos <> 0 Then
        '有分隔符,则取分隔符后面部分
        tmpString = Left$(sData, lpos - 1)
        sData = Mid$(sData, lpos + Len(Delimiter))
    Else
        '无分隔符,则取全部
        tmpString = sData
        sData = ""
    End If
    GetToken = tmpString
End Function

Public Function FormatByte(Number As Double) As String
    FormatByte = Format(Number / 1024, "#,##0.00")
End Function

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?