带DatagramPacket的getAddress()是否返回一个值得信赖的IP地址?

时间:2018-02-23 18:49:02

标签: java udp

我编写了一个小的身份验证系统,我使用这段代码来获取用户的IP:

DatagramSocket socket = new DatagramSocket(port);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
InetAddress address = packet.getAddress();
String ip = address.toString().replace("/", "");

我的问题是:我们可以信任字符串“ip”给出的值吗?有人可以在数据包的标题中放入假ip吗?

这是非常令人困惑的,UDP标头是否包含UDP数据包发送方的IP,如果可以,我们是否可以更改此标头以使用其他IP进行修改?

1 个答案:

答案 0 :(得分:0)

在已建立的TCP连接中,您可以假设远程IP地址有效,否则您无法将任何内容发送回主机(并且TCP握手不会成功 - 请参阅SYN flood)。

但是,您无法保证远程IP地址实际上属于您的用户,因此执行身份验证的方式非常糟糕。

其中一位评论者提供了代理示例。它不一定是TOR:如果您在应用程序前使用NGINX或Apache服务器的常规做法,那么您将始终获得该服​​务器的IP地址(即您自己的服务器)。

此外,我们生活在一个大多数用户都支持NAT的世界。这意味着您可能拥有数十个或数百个不同的用户,这些用户似乎都来自同一个IP地址。

IP地址可能会发生变化。这在手机连接中尤为常见

相关问题