winsock如何在建立连接之前知道连接请求来自于哪里
背景:
使用winsock,客户端在连接到Server之后必须发送ClientID,根据clientID来控制哪些数据对于当前的客户端是可用的。如果没有合法的clientID,就断开连接。
但是,如果别人知道了server的监听端口,是不是就可以进行恶意“DDos”?
有没有办法在Accept requestID之前就知道这个request来自于哪里,以便设置黑名单 ?
或者:有没有办法防范类似的恶意行为?
[解决办法]
你可以做个协议嘛~ 只有用你的那个特定的协议才能与你建立连接
[解决办法]
Private Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)Dim i As IntegerDim IP As StringOn Error GoTo SCRerr If Index = 0 Then IP = tcpServer(Index).RemoteHostIP If not(IP = "182.16.0.103" Or IP = "192.168." + SUBIP + ".6" Or IP = "192.168." + SUBIP + ".5" Or IP = "192.168." + SUBIP + ".15" Or IP = "192.168." + SUBIP + ".13" Or IP = "192.168." + SUBIP + ".17") Then logtofile IP + String(15 - Len(IP), " ") + "[" + Date$ + " " + Time$ + "] refused!" Exit Sub End If For i = SrchS To 10 If SlotS(i) = 0 Then Exit For Next If i <= 10 Then GoTo ACCEPT ElseIf SrchS > 1 Then For i = 1 To SrchS - 1 If SlotS(i) = 0 Then GoTo ACCEPT Next End If logtofile "ERROR! tcpServer SlotS full" For i = 1 To 10 tcpServer_Close (i) Next SrchS = 1 End If Exit SubACCEPT: SlotS(i) = 1 SrchS = (i Mod 10) + 1 tcpServer(i).LocalPort = 1010 tcpServer(i).ACCEPT requestID log CStr(i) + " " + tcpServer(i).RemoteHostIP + String(15 - Len(tcpServer(i).RemoteHostIP), " ") + " Connected" Exit SubSCRerr: logtofile "tcpServer_ConnectionRequest 出现 #" + str(Err.Number) + " 意外错误: " + Err.Description Exit SubEnd Sub