java—如何创建只有特定ip才能连接的服务器套接字

gg58donl  于 2021-07-06  发布在  Java
关注(0)|答案(4)|浏览(266)

是否可以创建一个serversocket,其中serversocket只等待并接受来自特定ip的连接,而不使用serversocket#accept方法进行任何连接?
或者,是否有可能在接受连接之前知道它的ip,以便在它不是来自特定ip时可以拒绝它?

ergxz8rk

ergxz8rk1#

在具体的服务器套接字方面没有太多经验,但在tcp套接字方面有一些经验。我认为这是不可能的,但是您可以在接受后验证ip地址(tcp和udp套接字都接收另一台机器的ip,因为需要提供响应)。
我不明白为什么你会这样做(特别是考虑到IP,通常,随着时间的推移,由于许多原因动态变化),如果有其他方法来解决你的问题。

7kqas0il

7kqas0il2#

不支持。底层通信堆栈不支持tcp套接字的这种功能。
accept调用本身返回一个套接字,然后可以查询该套接字以获取远程ip地址。如果ip不符合您的要求,您可以立即关闭套接字。
(顺便说一下,您接受的是“连接”,而不是“套接字”。套接字仅仅是一个本地数据结构,每个端点一个;套接字是在您的计算机上创建的,以响应接受连接。这是你的电话和与另一端的人交谈的区别。)

j2datikz

j2datikz3#

在java中不确定,但在c或python中这是可能的。使用3级原始套接字,可以通过响应来阻止连接 SYN 数据包 RST 包,在接受它之前。

wgmfuz8q

wgmfuz8q4#

您不应该依赖源ip,因为从另一个主机发送具有相同ip的tcp/ip数据包很容易,请参阅ip欺骗。您需要使用ssl套接字并通过它进行一些身份验证。

相关问题