gpt4 book ai didi

java - 使用 DatagramPacket 的 getAddress() 是否返回值得信赖的 IP 地址?

转载 作者:行者123 更新时间:2023-12-02 11:35:50 26 4
gpt4 key购买 nike

我编写了一个小型身份验证系统,并使用此代码来获取用户的 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 给出的值吗?有人可以在数据包 header 中放入假 IP 吗?

很困惑,UDP头是否包含UDP数据包发送者的IP,如果是的话我们可以改变这个头来用另一个IP修改吗?

最佳答案

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

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

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

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

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

关于java - 使用 DatagramPacket 的 getAddress() 是否返回值得信赖的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48954416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com