繁体   English   中英

我可以指定允许向我发送连接请求的IP地址和端口号吗?

[英]Can I specify what IP address and Port number is allowed to send me a connection request?

我创建了一个服务器套接字,并指定了要监听的端口12345 ,并通过将INADDR_ANY传递给bind()来允许对它的连接请求通过系统上可用的任何IP地址。 这是服务器套接字的值:

在此处输入图片说明

我的问题是,我可以指定允许向我发送连接请求的IP地址和端口号(即,上图中的“外部地址”中的值)吗?

打开侦听套接字时,不能指定“一劳永逸”,但如果单个连接不是源自所需IP,则可以拒绝它们。 WSAAccept函数使您可以指定条件函数,该条件函数确定是否应接受连接。

这可以SO_CONDITIONAL_ACCEPT工作,但是我不确定以这种方式拒绝连接是否等同于立即接受并关闭它,也许您还需要设置套接字选项SO_CONDITIONAL_ACCEPT 才能在打开连接之前拒绝连接。
另请参阅此Q / A。

是的你可以。 这就是为什么有防火墙的原因。 您可以配置某些规则,例如仅允许某个IP地址进行连接。 Windows具有集成的防火墙,路由器也已配备。

您不能在程序中指定这些限制。

接受连接后,您将获得外部IP地址。 如果您不喜欢该连接,则可以随意关闭接受套接字。

匹配本地无源OPEN和外部有源OPEN中的套接字有两种主要情况。 在第一种情况下,本地无源OPEN已完全指定了外部套接字。 在这种情况下,匹配必须准确。 在第二种情况下,本地无源OPEN未指定外部套接字。 在这种情况下,只要本地套接字匹配,任何外部套接字都是可接受的。 其他可能性包括部分限制的比赛。

这是RFC793中的介绍。 在实际的实现中,例如@alain,可以在Windows系统中使用SO_CONDITIONAL_ACCEPT。 Linux系统中没有此类API,您可以在调用accept之后判断是否允许IP和端口,并且不允许直接断开连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM