标签: ipv6

本地主机上的双栈 ipv6/ipv4

我有一个 ipv4 服务器,它只接受通过本地主机的连接(使用INADDR_LOOPBACK)。我想将此服务器转换为双栈 ipv6/ipv4。但是,使用in6addr_loopback仅接受到 的连接::1

我发现我可以使用同时接受 ipv4 和 ipv6 连接in6addr_any,但是因为这也允许来自任何地方的连接,所以它对我的特定情况没有用处。

是否可以同时绑定到 ipv6 localhost ( ::1) 和 ipv4 localhost ( 127.0.0.1) ?

networking ipv6

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

泽西岛客户端 IPv6

我可以使用 Jersey Client 连接到使用 IPv6 的 REST 资源吗?

我收到此错误:

com.sun.jersey.api.client.ClientHandlerException: java.net.MalformedURLException: For input string: ":94ea:d2bc:c189:209c%10:8100"
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:128)
    at com.sun.jersey.api.client.Client.handle(Client.java:551)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:556)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:69)
    at com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:475)
    at com.bmc.aps.agent.jersey.JerseyClient.put(JerseyClient.java:168)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.MalformedURLException: For input string: ":94ea:d2bc:c189:209c%10:8100"
    at java.net.URL.<init>(URL.java:601)
    at java.net.URL.<init>(URL.java:464)
    at java.net.URL.<init>(URL.java:413)
    at java.net.URI.toURL(URI.java:1081)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:139)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:126)
    ... 8 more
Run Code Online (Sandbox Code Playgroud)

在例外情况下,ip 被切断(:94ea:d2bc:c189:209c%10而不是fe80::94ea:d2bc:c189:209c%10)。在调试中,我可以看到 Web 资源 URI 正常。

java rest jersey ipv6

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

如何将 IPv6 地址添加到 Google API 凭据?

我正在开发一个使用 Google API(自定义搜索引擎)的 Ruby 应用程序。它与公共 API 访问密钥配合得很好。

我刚刚将互联网升级到 Uverse,突然 Google API 停止工作。我发现问题出在IP地址上。我的 Uverse 调制解调器使用 IPv6。

不幸的是,Google Developer Public API 访问密钥似乎只接受 IPv4 地址,因此当我尝试添加 IPv6 地址时,我收到错误消息:“IP 地址无效”。

有人能够让它发挥作用吗?如果可以避免的话,我宁愿不实现 oAuth。

api google-api ipv6 google-api-ruby-client

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

如何在 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
查看次数

为什么我的 Web 应用程序使用 ipv6 连接到本地 postgres

所以我一直在开发一个连接到另一台机器上的 postgresql 服务器的 Web 应用程序。一切正常。

然后我将 Web 应用程序部署到运行 postgresql 服务器的同一台计算机上,并收到一条错误消息:

FATAL: 28000: no pg_hba.conf entry for host "fe80::ccee:154f:18f5:418f%11", user "myuser", database "mydb", SSL off 
Run Code Online (Sandbox Code Playgroud)

我的 pg_hba-conf 已经有这一行:

# IPv6 local connections:
host    all             all             ::1/128                 md5  
Run Code Online (Sandbox Code Playgroud)

那应该是 ipv6 的环回地址,对吗?

我可以通过添加这一行来修复它(纯粹猜测):

#host   all             all             fe80::/16               md5
Run Code Online (Sandbox Code Playgroud)

我怀疑这可以让每个人都连接起来吗?

那么问题是为什么要使用 ipv6 而不是 ipv4?

为什么环回不起作用?

postgresql ipv6 npgsql

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

如何通过RAW套接字发送修改后的IPv6数据包?

我正在尝试通过 C Linux 中的 RAW 套接字发送自定义 IPv6 标头。
我已经使用 IP_HDRINCL 套接字选项在 IPv4 中取得了成功,但是,IPv6 没有等效的选项。
在这里找到了一个解决方法,建议使用socket(AF_INET6, SOCK_RAW, IPPROTO_RAW)与启用 IP_HDRINCL 套接字选项具有相同的效果。套接字已成功创建,并且在使用带有修改后的标头的函数

之前我不会收到任何错误。sendto

我这样设置套接字:

static int socketFd = 0;
static struct sockaddr_in6 remote;

int main()
{
    socketFd = socket (PF_INET6, SOCK_RAW, IPPROTO_RAW);

    if (socketFd < 0)
    {
        printf ("An error ocurred while creating the socket.\n");
        exit (2);
    }

    remote.sin6_family = AF_INET6;
    remote.sin6_port = htons (25000);

    if (inet_pton (AF_INET6, "fd00:c0de::70d6:4ab9:115d:8cda", &(remote.sin6_addr)) != 1)
    {
        close (socketFd);
        printf ("Unable to …
Run Code Online (Sandbox Code Playgroud)

c linux ipv6 raw-sockets sendto

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

使用未弃用的方法以编程方式获取 Android 设备的 IPv4 和 IPv6,无论是在 Wifi 上还是在 Carier 的网络上

我遇到了一些关于在 Android 上以编程方式获取IPv4 和 IPv6 地址的讨论。这些其他问题和答案的问题是:

  • 这些问题/答案现在已经老了,因此经常被弃用。我正在寻找一种以非弃用方式完成它的方法(例如,不推荐使用 InetAddressUtils,其他方式也是如此)。
  • 我想知道如何在 Wifi 或运营商网络同时获取IPv4 和 IPv6地址。

有没有人可以告诉我如何在没有冗长方法的情况下以简短整洁的方式完成它(如果可能的话)?

android ipv4 ipv6 android-networking

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

Docker 容器不能通过 localhost 访问,但可以通过 127.0.0.1 访问

问题

我有一个 Docker 服务容器暴露于*:8080.

  • 我无法通过localhost:8080. Chrome /curl无限期挂断。
  • 但是如果我使用任何其他本地IP,我就可以访问容器,例如 127.0.0.1

这让我很困惑,因为在我的hosts文件中,localhost重定向到127.0.0.1.

为什么会这样?它是否以某种方式与 IPv4/IPv6 双栈相关?

环境

我在 PopOS(基于 Ubuntu)上,启用了 Docker Swarm。我正在使用这个测试堆栈文件,traefik.docker-compose.yml

version: '3'
services:
  reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --api --docker # Enables the web UI and tells Traefik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # …
Run Code Online (Sandbox Code Playgroud)

networking ipv4 ipv6 docker docker-swarm

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

IPv6 绑定错误:无法分配请求的地址

据我了解,IPv6地址是按块分配的。每台机器都会获得一个 IPv6 地址范围,该范围内的任何 IPv6 地址都将指向它。

这一假设的基础: https ://stackoverflow.com/a/15266701/681671

/64 是前缀长度。地址中的位数是固定的。因此 /64 表示 128 位 IPv6 地址的前 64 位是固定的。其余位(本例中为 64 位)很灵活,您可以使用所有这些位。这意味着当您的 ISP 为您提供 /64 时,他们会为您提供 264 个地址(即 18,446,744,073,709,551,616 个地址)。

编辑:我使用 Wireshark 确认发送到该 /64 范围内任何 IP 的数据包确实会路由到我的服务器。

ifconfig从输出中查看这一行

inet6 2a01:2e8:d2c:e24c::1  prefixlen 64  scopeid 0x0<global>
Run Code Online (Sandbox Code Playgroud)

我的结论是所有带前缀的 IPv6 地址都2a01:2e8:d2c:e24c将指向我的机器。

但是我无法将任何服务绑定到除 IPv6 地址之外的任何服务 2a01:2e8:d2c:e24c:0000:0000:0000:0001

nc -l 2a01:2e8:d2c:e24c:0000:0000:0000:0002 80不起作用

nc -l 2a01:2e8:d2c:e24c:0000:0000:0001:0001 80不起作用

nc -l 2a01:2e8:d2c:e24c:1000:0000:0000:0001 80不起作用

nc -l 2a01:2e8:d2c:e24c:0000:0000:0000:0001 80 只有这个有效

nc -l <IP> <PORT>在指定的 IP 和端口上打开一个简单的 TCP …

ubuntu ipv6 docker

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

Windows 上的 GetAddrInfo (C++) 未正确处理 IPv6,对于通过其他方式正确解析的域返回错误代码 11004

注意:我在这里广泛查看了一个类似(但不重复)的问题:GetAddrInfo cannot resolve ipv6.google.com (but nslookup can)。这个问题已有 9 年历史,OP 没有遇到与我完全相同的行为,并且已经接受的答案并没有解决我的问题——事实上,我特意遵循了那个答案的建议,但在样本中没有用下面的代码,我得到的错误与那个问题不同。此外,我仅仅通过评论就成功地让任何人参与到一个古老的问题中的可能性为零。这与我今天遇到的问题不同,所以我创建了一个新的、更详细的问题。

我有一台运行 Visual Studio 2017 的 Windows 10 机器和一台运行 Visual Studio 2019 的 Windows Server 2016 机器。两台机器都配置了 IPv4 和 IPv6 地址。在两台机器上,nslookup.exe返回三个不同域的预期结果:

> nslookup www.google.com
...
Addresses:  2607:f8b0:4002:80a::2004
          172.217.3.228
...
> nslookup ipv4.google.com
...
Addresses:  74.125.136.102
...
> nslookup ipv6.google.com
...
Addresses:  2607:f8b0:4002:812::200e
...
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试编写一个示例程序,用于GetAddrInfo查找这三个相同的域:

#include <iostream>
#include <sstream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"WS2_32.Lib")

int main(int argc, char* argv[])
{
   WORD wVersionRequested = MAKEWORD(2, 2); …
Run Code Online (Sandbox Code Playgroud)

c++ windows ipv6 visual-c++ getaddrinfo

5
推荐指数
0
解决办法
100
查看次数