winsock如何在建立连接之前知道连接请求来自于哪里
背景:
使用winsock,客户端在连接到Server之后必须发送ClientID,根据clientID来控制哪些数据对于当前的客户端是可用的。如果没有合法的clientID,就断开连接。
但是,如果别人知道了server的监听端口,是不是就可以进行恶意“DDos”?
有没有办法在Accept requestID之前就知道这个request来自于哪里,以便设置黑名单 ?
或者:有没有办法防范类似的恶意行为?
[解决办法]
你可以做个协议嘛~ 只有用你的那个特定的协议才能与你建立连接
[解决办法]
[解决办法]
在接受连接这一块,似乎是不可控的,能做的也只有在路由器和防火墙上面
[解决办法]
+1
[解决办法]
在发送与接收的内容上做安全处理吧,接收的requestID是否合法没有判断的依据
[解决办法]
谁能防止得了DDos呢? 这就像打仗冲锋一样, 你能防止的了 誓死的士兵 向阵地冲击的行为? 他们都不怕死你还能防止的了。 所以这个“行为”是无法防御的, 除非你让他们打消念头。
解决办法:
1、被动防御
典型的就是硬件防火墙,也就是盾牌, 让这个外层硬壳替代你承受冲击, 当然在化解冲击的技术上硬件做的更专业。 形象点:就像恶狗闯门一般, 你可以搞个外围栅栏, 档的越远越好, 远到一定距离, 对你来说就没影响了对吧。 道理一样。 但被动防御是有极限的, 就算是Google那么先进的防御服务器,如果攻击达到一定数量, 照样封闭, 你就用极限思维想象一番, 一个星系的数据冲击你你不爆才怪。
2、主动防御
这个就多了, 说不清了, 可以从无数角度下手,技术和非技术的因素都在里头
[解决办法]
[解决办法]
可以用 getpeername 取得套接字的相连的端地址
[解决办法]
[解决办法]
仅供参考
- VB code
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