如何在 client 与 server 建立“连接”之前,对 client 的 ip 进行验证?如果非法,则不让连接?

sunkill 2007-09-05 04:01:59
如题
...全文
305 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
2025‘someday 2007-09-09
  • 打赏
  • 举报
回复
看看我的BLOG:
http://blog.csdn.net/wang921718/archive/2007/09/04/1772396.aspx
希望对你有所帮助
WinEggDrop 2007-09-09
  • 打赏
  • 举报
回复
AcceptSocket = WSAAccept(ListenSocket, (SOCKADDR *)&client, &nSize,&ConditionFunc,0);
看WSAAcept的第四个参数,

INT CALLBACK ConditionFunc(LPWSABUF lpCallerId,LPWSABUF lpCallerData,LPQOS lpSQOS,LPQOS lpGQOS,LPWSABUF lpCalleeId,LPWSABUF lpCalleeData,GROUP FAR *g,DWORD_PTR dwCallbackData)
{
struct sockaddr_in ClientAddress;
CopyMemory((void *)&ClientAddress,(void *)lpCallerId->buf,sizeof(ClientAddress));

char ClientIP[32] = {0};
ZeroMemory(ClientIP,sizeof(ClientIP));
strncpy(ClientIP,inet_ntoa(ClientAddress.sin_addr),sizeof(ClientIP) - 1);
这里增加代码是否可接受的IP,如果不是,return CF_REJECT;如果是允许, return CF_ACCEPT;
}

不知道这是不是你想要的
}
toxyboy 2007-09-08
  • 打赏
  • 举报
回复
帮你up,一点accept触发了,也就说明了connect已经成功了。我想如果要改,也只能该ws2_32.lib,看看在接收到连接请求之后,accept之前能否做到?windows提供了用户的自定义接口层,因该可以吧,没深入研究过。
ifeelhappy 2007-09-07
  • 打赏
  • 举报
回复
这个在应用层应该不可以吧,因为你的程序肯定是要进入监听状态的啊,不然合法程序也没法connect上了。你进入监听状态,就必须会看到非法客户的连接,至于接受不接受这是accept的事情,所以,我期待这个问题的答案
ilovechao1314 2007-09-06
  • 打赏
  • 举报
回复
拦截TCP报文好像要写个虚拟驱动吧?好难
zaodt 2007-09-06
  • 打赏
  • 举报
回复
Up
sunkill 2007-09-06
  • 打赏
  • 举报
回复
在Winsock环境下,只能通过拦截TCP报文,比如象防火墙那样去实现,而不能在应用层实现。

我的意思,就是想直接拦截TCP报文,不能在应用层实现?
只能通过写一个“驱动”来实现?
redex 2007-09-06
  • 打赏
  • 举报
回复
得在tcp层拦截,直接使用accept是不行的
ouyh12345 2007-09-06
  • 打赏
  • 举报
回复
得在tcp层拦截,直接使用accept是不行的
bestgood 2007-09-06
  • 打赏
  • 举报
回复
用放火墙或写个驱动吧!
sunkill 2007-09-06
  • 打赏
  • 举报
回复
我想实现的是:
在建立连接之前,就对“IP地址”进行判断,如果“IP地址不合法”,则不让它建立连接。

我看到通常有些的人做法是 一个连接连上来后,再对“IP地址”进行判断,非法则断开连接。
而我现在想实现的是“在连接未建立之前,就对它进行阻止”。
僵哥 2007-09-05
  • 打赏
  • 举报
回复
AcceptEx同样也已经执行完了Accept。
贵子潘 2007-09-05
  • 打赏
  • 举报
回复
AcceptEx里可以验证,非法的连接,直接close
僵哥 2007-09-05
  • 打赏
  • 举报
回复
在Winsock环境下,只能通过拦截TCP报文,比如象防火墙那样去实现,而不能在应用层实现。
Yofoo 2007-09-05
  • 打赏
  • 举报
回复
在accept前检查
ilovechao1314 2007-09-05
  • 打赏
  • 举报
回复
不明白什么意思了,lz给解释下吧,他说的应该是在socket这层吧,
arong1234 2007-09-05
  • 打赏
  • 举报
回复
socket层没有办法吧
ilovechao1314 2007-09-05
  • 打赏
  • 举报
回复
用getsockopt这个能得到ip,再进行ip段验证,不知道是不是这个意思
  • 打赏
  • 举报
回复
防火墙,最方便

要不在程序accept调用之后检查IP然后 继续或者关掉socket

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧