先前参照网上的资料,写了一个密罐程序。
程序功能如下可自定义打开端口,如果发现有IP访问此端口,纪录其IP。但发现有很多弊端和问题,如下:
一、每一个人访问,就要使用掉一个winsock,那么要使用多少个winsock控件,如果对方使用几百条线程的扫描器扫描我当前打开的端口时,程序如何编写?如何可以避免winsock不够用~?二、对方断开连接,我如何可以得知对方与我断开了。三、如果我定义打开的端口是80,那么,我如何编写程序返回一个虚拟的IIS banner,欺骗对方,让对方以为我启动了IIS服务。四、如果对方想我提交 IIS漏洞,我如何可以返回 IIS HTTP协议码,比如:"200" : 完成,"202" : 接受,"302" : 发现,"404" : 未发现。请高手指点!谢谢!!

解决方案 »

  1.   

    补充一下,IIS漏洞提交信息如下http://1123.myrice.com/jiaox/jiaoc245.htm再次感谢。
      

  2.   

    第一个问题:好像用动态载入Winsock控件就可以了。其他的就不知道了,学习!
      

  3.   

    仔细研究一下协议不就得了。或者你可以使用一个网络嗅探器,看IIS返回什么数据,照做就可以了。
      

  4.   

    1.这个你就需要用到winsock控件数组,有多少控件数组,最大的访问量就是多少
    2.客户端断开,你可以用一个listbox,
    Private Sub Form_Load()
        Dim I As Integer
        Label1.Caption = "连接信息"
        Clients = 300
        Winsock1(0).Protocol = sckTCPProtocol
        Winsock1(0).LocalPort = 3333
        Winsock1(0).Listen
        For I = 1 To Clients
            Load Winsock1(I)
        Next
        Text1.Text = ""
    End Sub
    Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        Dim I As Integer
        Dim Temps As Integer
        For I = 1 To Clients
            If Winsock1(I).State = sckClosed Then
                Winsock1(I).Accept requestID
                Temps = I
                Exit For
            End If
        Next
        ListReFresh Temps & " " & Winsock1(Temps).RemoteHostIP & " " & Winsock1(Temps).RemotePort
    End SubPrivate Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        On Error Resume Next
        Dim I As Integer
        Dim ClientData As Variant
        Winsock1(Index).GetData ClientData, vbString
        Text1.Text = Text1.Text & ClientData & vbCrLf
        For I = 1 To Clients
            If Winsock1(I).State = sckConnected Then
                Winsock1(I).SendData ClientData
                DoEvents
            End If
        Next
    End Sub
    Private Sub Winsock1_Close(Index As Integer)    RemoveList Index
        Winsock1(Index).Close
        Unload Winsock1(Index)
        Load Winsock1(Index)
    End SubPrivate Sub ListReFresh(Optional ClientDatas As String)
        Dim I As Integer
        If Trim(ClientDatas) <> "" Then
            List1.AddItem ClientDatas
        End If
    End SubPrivate Function RemoveList(ByVal Index As Integer)
        Dim I As Integer
        Dim Datas    For I = 1 To List1.ListCount
            List1.ListIndex = I - 1
            Datas = Split(List1.Text, " ")
            If Val(Datas(0)) = Index Then
                List1.RemoveItem List1.ListIndex
                List1.Refresh
                Exit Function
            End If
        NextEnd Function
    当客户端断开listbox中就会少一条记录