是否可以创建一个serversocket,其中serversocket只等待并接受来自特定ip的连接,而不使用serversocket#accept方法进行任何连接?或者,是否有可能在接受连接之前知道它的ip,以便在它不是来自特定ip时可以拒绝它?
ergxz8rk1#
在具体的服务器套接字方面没有太多经验,但在tcp套接字方面有一些经验。我认为这是不可能的,但是您可以在接受后验证ip地址(tcp和udp套接字都接收另一台机器的ip,因为需要提供响应)。我不明白为什么你会这样做(特别是考虑到IP,通常,随着时间的推移,由于许多原因动态变化),如果有其他方法来解决你的问题。
7kqas0il2#
不支持。底层通信堆栈不支持tcp套接字的这种功能。accept调用本身返回一个套接字,然后可以查询该套接字以获取远程ip地址。如果ip不符合您的要求,您可以立即关闭套接字。(顺便说一下,您接受的是“连接”,而不是“套接字”。套接字仅仅是一个本地数据结构,每个端点一个;套接字是在您的计算机上创建的,以响应接受连接。这是你的电话和与另一端的人交谈的区别。)
j2datikz3#
在java中不确定,但在c或python中这是可能的。使用3级原始套接字,可以通过响应来阻止连接 SYN 数据包 RST 包,在接受它之前。
SYN
RST
wgmfuz8q4#
您不应该依赖源ip,因为从另一个主机发送具有相同ip的tcp/ip数据包很容易,请参阅ip欺骗。您需要使用ssl套接字并通过它进行一些身份验证。
4条答案
按热度按时间ergxz8rk1#
在具体的服务器套接字方面没有太多经验,但在tcp套接字方面有一些经验。我认为这是不可能的,但是您可以在接受后验证ip地址(tcp和udp套接字都接收另一台机器的ip,因为需要提供响应)。
我不明白为什么你会这样做(特别是考虑到IP,通常,随着时间的推移,由于许多原因动态变化),如果有其他方法来解决你的问题。
7kqas0il2#
不支持。底层通信堆栈不支持tcp套接字的这种功能。
accept调用本身返回一个套接字,然后可以查询该套接字以获取远程ip地址。如果ip不符合您的要求,您可以立即关闭套接字。
(顺便说一下,您接受的是“连接”,而不是“套接字”。套接字仅仅是一个本地数据结构,每个端点一个;套接字是在您的计算机上创建的,以响应接受连接。这是你的电话和与另一端的人交谈的区别。)
j2datikz3#
在java中不确定,但在c或python中这是可能的。使用3级原始套接字,可以通过响应来阻止连接
SYN
数据包RST
包,在接受它之前。wgmfuz8q4#
您不应该依赖源ip,因为从另一个主机发送具有相同ip的tcp/ip数据包很容易,请参阅ip欺骗。您需要使用ssl套接字并通过它进行一些身份验证。