如何让Winsock程序只接受来自特定地址的连接请求?我想拒绝连接被完全忽略,而不是得到TCP拒绝。Winsock,只接受来自特定IP地址的请求
回答
要使Winsock程序只接受来自特定IP地址的连接,请使用WSAAccept()
的条件接受机制。首先,启用该功能:
SOCKET sd = socket(...);
listen(sd, ...);
DWORD nTrue = 1;
setsockopt(sd, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char*)&nTrue, sizeof(nTrue));
然后,修改你的接受调用看起来像这样:
sockaddr_in sin;
WSAAccept(sd, (sockaddr*)&sin, sizeof(sin), ConditionalAcceptChecker, 0);
ConditionalAcceptChecker
是你写一个函数,这使得有关堆栈是否会接受还是决定拒绝连接。如果它拒绝它,远程节点将得到一个TCP RST数据包,所以它知道它被拒绝了。
如果您希望网络堆栈在不通知远程对等方的情况下悄悄丢弃来自其他地址的连接尝试,则必须在比Winsock更低的级别上执行此操作。在Vista或Windows Server 2008及以上版本,此命令将修改防火墙规则给你想要的效果:
netsh advfirewall firewall add rule name=MyProtocol dir=in remoteip=1.2.3.4
localport=1234 protocol=tcp action=allow
这是一个简单的命令,因为拆分对堆栈溢出格式限制。
它说的是允许IP 1.2.3.4的远程机器连接到本机上的TCP端口1234。如果您的默认模式启用了防火墙,并拒绝了未明确允许的流量,则所有其他机器的连接尝试将被丢弃。
在老版本的Windows上,回到XP,有一个不同的“netsh防火墙”语法获得相同的效果。只需在命令提示符下键入“netsh防火墙”以开始浏览其内置帮助。
如果winsock可以配置为不拒绝,但丢弃来自不期望地址的流量 – user396829 2010-07-21 13:09:21
上面更新的答案覆盖了防火墙级接受/拒绝控制。 – 2010-07-21 14:58:00
+1,不知道'WSAAccept'中的特征 – Default 2010-08-12 11:45:21
- 1. 发送来自特定IP地址的SOAP请求
- 2. 来自httpheader的请求的IP地址
- 3. 套接字只接受特定地址?
- 4. 如何限制Apache只接受来自本地主机的特定url请求?
- 5. 如何只接受来自XML配置文件中指定IP地址的服务器的请求
- 6. 来自特定IP的API请求
- 7. 将ASP.NET应用程序配置为始终接受来自特定IP地址的GET请求?
- 8. 只接受来自本地主机的获取/发布请求
- 9. 阻止请求特定网址的IP地址
- 10. 来自特定IP - 请求库的API GET请求 - Python
- 11. 如何获取请求来自的服务器的IP地址?
- 12. 在接受套接字连接之前很热得到请求的IP地址?
- 13. 来自Rails请求头的客户端IP地址
- 14. Google Vision API来自IP地址的请求被阻止
- 15. 仅接受来自特定IP的套接字
- 16. 来自特定IP地址的特殊许多匹配
- 17. Django:只接受来自我的应用程序的请求
- 18. 对特定bean的Incept接受请求
- 19. 接受SQL服务器中来自aLL IP的远程TCP/IP请求
- 20. 如何使用HttpClient从特定IP地址发送请求? C#
- 21. 只接受来自已认证用户的某些ajax请求
- 22. 使IPython Notebook只接受来自给定地址/子网的连接
- 23. 的Winsock无法连接到本地IP地址
- 24. 只接受来自特定子网的连接
- 25. 如何发送来自IPv6地址的请求具有dula IP的IP地址(即IPV4和IPv6)
- 26. 欺骗HTTP请求的源IP地址
- 27. 什么IP地址不接受退货
- 28. 仅允许来自指定IP地址的传入连接
- 29. jNetPcap数据包丢弃,如果来自特定IP地址
- 30. mongoDB只允许来自特定IP的连接吗?
问你是否可以将winsock配置为拒绝来自不受欢迎地址的流量,或者如何编写使用winsock拒绝来自不期望地址的流量的软件? – Avalanchis 2010-07-20 13:47:14