读书人

winsock怎么在建立连接之前知道连接请

发布时间: 2012-02-16 21:30:36 作者: rapoo

winsock如何在建立连接之前知道连接请求来自于哪里
背景:
使用winsock,客户端在连接到Server之后必须发送ClientID,根据clientID来控制哪些数据对于当前的客户端是可用的。如果没有合法的clientID,就断开连接。
但是,如果别人知道了server的监听端口,是不是就可以进行恶意“DDos”?
有没有办法在Accept requestID之前就知道这个request来自于哪里,以便设置黑名单 ?

或者:有没有办法防范类似的恶意行为?

[解决办法]
你可以做个协议嘛~ 只有用你的那个特定的协议才能与你建立连接
[解决办法]

探讨
背景:
使用winsock,客户端在连接到Server之后必须发送ClientID,根据clientID来控制哪些数据对于当前的客户端是可用的。如果没有合法的clientID,就断开连接。
但是,如果别人知道了server的监听端口,是不是就可以进行恶意“DDos”?
有没有办法在Accept requestID之前就知道这个request来自于哪里,以便设置黑名单 ?

或者:有没有办……

[解决办法]
在接受连接这一块,似乎是不可控的,能做的也只有在路由器和防火墙上面
[解决办法]
+1

探讨
或许是我想太多了,哪来那么多攻击!!都没几个人知道的软件,谁还稀得去攻击。。

[解决办法]
在发送与接收的内容上做安全处理吧,接收的requestID是否合法没有判断的依据
[解决办法]
谁能防止得了DDos呢? 这就像打仗冲锋一样, 你能防止的了 誓死的士兵 向阵地冲击的行为? 他们都不怕死你还能防止的了。 所以这个“行为”是无法防御的, 除非你让他们打消念头。

解决办法:
1、被动防御
典型的就是硬件防火墙,也就是盾牌, 让这个外层硬壳替代你承受冲击, 当然在化解冲击的技术上硬件做的更专业。 形象点:就像恶狗闯门一般, 你可以搞个外围栅栏, 档的越远越好, 远到一定距离, 对你来说就没影响了对吧。 道理一样。 但被动防御是有极限的, 就算是Google那么先进的防御服务器,如果攻击达到一定数量, 照样封闭, 你就用极限思维想象一番, 一个星系的数据冲击你你不爆才怪。
2、主动防御
这个就多了, 说不清了, 可以从无数角度下手,技术和非技术的因素都在里头
[解决办法]
探讨
谁能防止得了DDos呢? 这就像打仗冲锋一样, 你能防止的了 誓死的士兵 向阵地冲击的行为? 他们都不怕死你还能防止的了。 所以这个“行为”是无法防御的, 除非你让他们打消念头。

解决办法:
1、被动防御
典型的就是硬件防火墙,也就是盾牌, 让这个外层硬壳替代你承受冲击, 当然在化解冲击的技术上硬件做的更专业。 形象点:就像恶狗闯门一般, 你可以搞个外围栅栏, 档的越远越好, 远到一定……

[解决办法]
可以用 getpeername 取得套接字的相连的端地址
[解决办法]
探讨
可以用 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 

读书人网 >VB

热点推荐