gpt4 book ai didi

ruby - 如何在不利用其他 IP 地址的情况下从 Ruby 获取我机器的 IP 地址?

转载 作者:数据小太阳 更新时间:2023-10-29 06:28:43 27 4
gpt4 key购买 nike

我到处搜索,但他们的解决方案需要某种形式的 IP 地址。以下是我找到的解决方案。

    require 'socket'
#METHOD 1
ip = IPSocket.getaddress(Socket.gethostname)
puts ip

#METHOD 2
host = Socket.gethostname
puts host

#METHOD 3(uses Google's address)
ip = UDPSocket.open {|s| s.connect("64.233.187.99", 1); s.addr.last}
puts ip

#METHOD 4(uses gateway address)
def local_ip
orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily

UDPSocket.open do |s|
s.connect '192.168.1.1', 1
s.addr.last
end
ensure
Socket.do_not_reverse_lookup = orig
end

ip=local_ip
puts ip

所有这些都需要某人的 IP 地址。有没有不使用别人IP地址的解决方案?最好与平台无关。

最佳答案

您正在寻找的解决方案不只是:

require 'socket'

addr_infos = Socket.ip_address_list

由于一台机器可以有多个接口(interface)和多个 IP 地址,此方法返回一个数组 Addrinfo .

您可以像这样获取确切的 IP 地址:

addr_infos.each do |addr_info|
puts addr_info.ip_address
end

您可以通过拒绝环回和私有(private)地址来进一步过滤列表,因为它们通常不是您感兴趣的内容,如下所示:

addr_infos.reject( &:ipv4_loopback? )
.reject( &:ipv6_loopback? )
.reject( &:ipv4_private? )

关于ruby - 如何在不利用其他 IP 地址的情况下从 Ruby 获取我机器的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112955/

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