在我的服务端程序中,下面的函数是用于接受连接的
void CLanManagerDoc::ProcessPendingAccept()
{
CClientSocket *pClientSocket = new CClientSocket(this);
ASSERT(pClientSocket); if(m_pListenSocket->Accept(*pClientSocket) != 0) // accept success
{
pClientSocket->InitClientSocket();
m_connSocketList.AddTail(pClientSocket);
}
else
{
delete pClientSocket;
}}请教:有没有什么办法在accept()之后判断该连接是合法的Client的连接,而不是别人的端口扫描程序用connect()尝试的连接?目前我能想到的是:连接之后,合法的Client发送用户名/密码等验证信息到服务器端,不合法的就断开连接,不知道各位是怎么做的?
void CLanManagerDoc::ProcessPendingAccept()
{
CClientSocket *pClientSocket = new CClientSocket(this);
ASSERT(pClientSocket); if(m_pListenSocket->Accept(*pClientSocket) != 0) // accept success
{
pClientSocket->InitClientSocket();
m_connSocketList.AddTail(pClientSocket);
}
else
{
delete pClientSocket;
}}请教:有没有什么办法在accept()之后判断该连接是合法的Client的连接,而不是别人的端口扫描程序用connect()尝试的连接?目前我能想到的是:连接之后,合法的Client发送用户名/密码等验证信息到服务器端,不合法的就断开连接,不知道各位是怎么做的?
不过如果是accept之后再关闭的话,端口扫描程序就知道该端口正在侦听它会使用SYN包攻击该端口,使得该端口忙于处理,而无法充足的给合法客户提供服务最好能在ip层进行拦截,向不合法的ip用户发送RST,或者不处理SYN包,这样对方就无法知道该
端口正在侦听了
经过代理再连接上来.
2.一个简单的验证以判断(可以带用户名和密码,也可以只是密码或一个特定的数据包)