标签: inet

InetAddress.isSiteLocalAddress()实际上意味着什么?

下面是一些代码,用于确定应该在多宿主框上工作的本地主机名:

 /**
 * Work out the first local host name by iterating the network interfaces
 * 
 * @return
 * @throws SocketException
 */
private String findFirstLocalHostName() throws SocketException {

    Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();
    while (ifaces.hasMoreElements()) {
        NetworkInterface iface = ifaces.nextElement();
        Enumeration<InetAddress> addresses = iface.getInetAddresses();
        while (addresses.hasMoreElements()) {
            InetAddress add = addresses.nextElement();
            if (!add.isLoopbackAddress() && add.isSiteLocalAddress()) {
                return add.getHostName();
            }
        }
    }
    throw new RuntimeException("Failed to determine local hostname");
}
Run Code Online (Sandbox Code Playgroud)

对isSiteLocalAddress的调用是否会引入错误?我找不到有关此方法的任何有用信息,但我感觉它只与IP v 6有关并且已被弃用.

java network-programming inet

11
推荐指数
1
解决办法
1万
查看次数

如何在Postgres中的inet字段上使用LIKE

我需要执行以下查询:

SELECT * FROM users WHERE ip LIKE '88.99.%';
Run Code Online (Sandbox Code Playgroud)

问题是inet数据类型似乎不支持通配符(至少不是我在前面的查询中使用它们的方式).

我想知道的是,在指定LIKE过滤器之前将字段转换为字符串是否是明智之举?(另一方面,即使方法本身有效,这可能会减慢整个查询的速度.)

postgresql inet sql-like

10
推荐指数
2
解决办法
8025
查看次数

Postgres检查IP(inet)是否在IP范围列表中

我想检查一系列范围内是否存在IP,例如: SELECT * FROM ip_address WHERE ip IN (<list of ip ranges>)

Postgresql文档声明使用<<运算符来检查IP是否包含在单个IP范围内,例如:inet '192.168.1.5' << inet '192.168.1/24'但是我不确定如何在范围列表中使用它而不必构造<<链的<<的.

postgresql ip-address inet

8
推荐指数
1
解决办法
4622
查看次数

Perl:如何在X秒后获得IO :: Socket :: INET超时?

我正在尝试使用无效端口连接到某个主机,我想在X秒后获得超时.怎么做 ?

我的代码:

 $sock = new IO::Socket::INET(
                  PeerAddr => $_[0],
    PeerPort => $_[1],
    Proto => 'tcp',
    Timeout => 2
    );
Run Code Online (Sandbox Code Playgroud)

sockets perl networking inet

7
推荐指数
1
解决办法
2万
查看次数

使用inet检测HTTP关闭

在我的mochiweb应用程序中,我使用长期持有的HTTP请求.我想检测与用户的连接何时死亡,我想通过这样做来弄清楚如何做到这一点:

Socket = Req:get(socket),
inet:setopts(Socket, [{active, once}]),
receive
     {tcp_closed, Socket} ->
             % handle clean up
     Data ->
             % do something 
end.
Run Code Online (Sandbox Code Playgroud)

这适用于:用户关闭其选项卡/浏览器或刷新页面.然而,当互联网连接突然死亡(说wifi信号突然丢失),或者当浏览器异常崩溃时,我无法检测到tcp关闭.

我错过了什么,或者还有其他方法可以实现这一目标吗?

erlang http mochiweb inet

6
推荐指数
1
解决办法
704
查看次数

inet_aton类似于IPv6的功能

inet_aton用来将IPv4 IP(216.12.207.142)转换为字符串3624718222.我使用以下代码:

ip_dec = unpack('>L', inet_aton(ip))[0]
Run Code Online (Sandbox Code Playgroud)

现在我需要将IPv6 ip 2001:23 :: 207:142转换为类似的字符串.它给我错误,因为它不是IPv4地址.我怎样才能做到这一点?

python ip type-conversion ipv6 inet

6
推荐指数
1
解决办法
4516
查看次数

由于IPV6需要128位(16字节),为什么在postgres CIDR数据类型中存储为24字节(8.1)和19字节(9.1)?

我正在使用ipv4和ipv6存储在postgres db中.

因为ipv4需要32位(4字节)而ipv6需要128(16byte)位.那么为什么在postgres中CIDR和INET数据类型的存储分别为IPV4和IPV6(8.1)的12字节和24字节.

对于IPV4和IPV6,它分别有7个字节和19个字节.

我不明白为什么它需要超过16字节的额外字节用于存储IPV6和4字节用于IPV4?

http://www.postgresql.org/docs/8.1/static/datatype-net-types.html

http://www.postgresql.org/docs/9.1/interactive/datatype-net-types.html

postgresql ipv4 ipv6 cidr inet

6
推荐指数
1
解决办法
1550
查看次数

避免 Rails 将 PostgreSQL inet 类型转换为 IPAddr 对象?

我的 Rails 项目有问题。在以前的项目(不是 Rails)中,我只是使用 PostgreSQL 中的“inet”类型来存储带有子网的 IP 地址,如下所示:

 192.168.1.0/30 
 192.168.1.1/30
 192.168.1.2/30
 192.168.1.3/30
Run Code Online (Sandbox Code Playgroud)

这是将 IP 和子网存储在一个字段中的好方法。现在我在 Rails (4.0.1) 和 Ruby (2.0.0 p247) 中使用 inet 类型,但是当我阅读和尝试时,Rails 将它转换为 IPAddr 对象。但是这个 IPAddr 对象正在破坏我的格式。它将上面的四个示例转换为以下内容:

 192.168.1.0/30
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止 Rails 这样做,或者有没有办法用字符串代替它?或者也许是另一个宝石?

当我尝试存储某些内容时,甚至当我尝试从数据库中读取现有值时,都会出现问题。

只是为了更细化:

 IPAddr.new("192.168.1.2/255.255.255.252") 
Run Code Online (Sandbox Code Playgroud)

创建数据库条目:

 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)

ruby postgresql ruby-on-rails inet ruby-on-rails-4

6
推荐指数
1
解决办法
2366
查看次数

使用 inet_ntop() 和 inet_pton() 转换 IP 地址输入(C 编程)

我正在尝试转换用户输入的 IP 地址,以便我可以对其执行一些按位运算以及已存储在结构中的地址。然而,我的问题是,当 IP 地址转换回时,输出始终为 255.255.255.255。例如,输入 10.0.0.1 或 192.16.2.1 总是返回 255.255.255.255。

任何帮助,将不胜感激。谢谢

  {
        struct sockaddr_in sa;
        char ipinput[INET_ADDRSTRLEN];

        fputs("Enter an IP Address: ", stdout);
        fflush(stdout);
        fgets(ipinput, sizeof ipinput, stdin);
        inet_pton(AF_INET, ipinput, &(sa.sin_addr));
        inet_ntop(AF_INET, &(sa.sin_addr), ipinput, INET_ADDRSTRLEN);
        printf("IP Address = \%s\ \n", ipinput);
        }
Run Code Online (Sandbox Code Playgroud)

c sockets inet

5
推荐指数
1
解决办法
3万
查看次数

如何在 PHP 中比较二进制字符串形式的 IP 地址?

我目前正在一个基于 PHP 的项目中使用 IPv4 和 IPv6 地址,并且我需要能够比较两个 IP 以确定哪一个数字更大。例如,192.168.1.9 大于 192.168.1.1。为了做到这一点,我使用inet_ptonunpack将 IP 转换为二进制字符串(我熟悉ip2long,但它仅限于 IPv4)。

这种方法一开始似乎工作正常,但我很快发现,当我将任何以 .32 结尾的 IP 与较低的 IP 地址进行比较时,我得到的结果不正确。例如,如果我将 192.168.1.0 与 192.168.1.32 进行比较,我的脚本会告诉我 192.168.1.0 大于 192.168.1.32。仅当其中一个 IP 以 0.32 结尾时才会发生这种情况。IP 的前三个八位字节可以更改,结果是相同的。

以下 PHP 代码生成一个说明此问题的页面:

// Loop through every possible last octet, starting with zero
for ($i = 0; $i <= 255; $i++) {

    // Define two IPs, with second IP increasing on each loop by 1
    $IP1 = "192.168.1.0";
    $IP2 = "192.168.1.".$i; …
Run Code Online (Sandbox Code Playgroud)

php ipv4 ipv6 inet

5
推荐指数
1
解决办法
2460
查看次数