我编写了一个小的身份验证系统,我使用这段代码来获取用户的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进行修改?
答案 0 :(得分:0)
在已建立的TCP连接中,您可以假设远程IP地址有效,否则您无法将任何内容发送回主机(并且TCP握手不会成功 - 请参阅SYN flood)。
但是,您无法保证远程IP地址实际上属于您的用户,因此执行身份验证的方式非常糟糕。
其中一位评论者提供了代理示例。它不一定是TOR:如果您在应用程序前使用NGINX或Apache服务器的常规做法,那么您将始终获得该服务器的IP地址(即您自己的服务器)。
此外,我们生活在一个大多数用户都支持NAT的世界。这意味着您可能拥有数十个或数百个不同的用户,这些用户似乎都来自同一个IP地址。
IP地址可能会发生变化。这在手机连接中尤为常见