Articles of ipv6

如何获得IPv6主机的范围?

我对IPv6协议没有多less了解,所以如果这个问题听起来很愚蠢,那么很抱歉。 当我检索我的networking中的所有IPv6地址列表时,我会得到一个名为scope的字段,如下所示: inet6 addr: 2001:470:1:82::11/64 Scope:Global inet6 addr: 2001:470:1:82::10/64 Scope:Global inet6 addr: 2001:470:1:82::13/64 Scope:Global inet6 addr: fe80::21d:9ff:fe69:2c50/64 Scope:Link inet6 addr: 2001:470:1:82::12/64 Scope:Global inet6 addr: 2001:470:1:82::15/64 Scope:Global inet6 addr: 2001:470:1:82::14/64 Scope:Global inet6 addr: 2001:470:1:82::5/64 Scope:Global inet6 addr: 2001:470:1:82::17/64 Scope:Global inet6 addr: 2001:470:1:82::6/64 Scope:Global inet6 addr: 2001:470:1:82::16/64 Scope:Global inet6 addr: 2001:470:1:82::7/64 Scope:Global inet6 addr: 2001:470:1:82::19/64 Scope:Global inet6 […]

IPv6在编程级别的Windows

在Windows中编程级别的IPv6和IPv4有什么不同? 我们可以只将IPv4地址更改为IPV6,并保持所有其他程序相同,是否可以正常工作?

在Linux上收听IPv6多播

我试图得到一个简单的多播例子在Linux上工作(我已经尝试了RHEL 4 2.6.9和Ubuntu 8.04 2.6.24)。 一般的想法是,我想服务器绑定到一个单播地址,然后将自己添加到组ff02 :: 1。 然后我会喜欢它接收发送到ff02 :: 1的多播。 下面的代码适用于Mac OS X 10.5(实际上,在OS X上运行的服务器获取从Linux客户端发送的多播),但是我无法使Linux服务器端正常工作。 它没有得到任何多播。 如果我更改代码绑定到::(INADDR6_ANY)而不是一个单播地址(我已经尝试链接本地和全球地址),它确实得到多播。 我想知道如果有人能指出我做错了什么。 服务器: memset( &hint, 0, sizeof( hint ) ); hint.ai_family = AF_INET6; hint.ai_socktype = SOCK_DGRAM; // argv[1] is either a link-local or a global address err = getaddrinfo( argv[1], NULL, &hint, &info ); if( err != 0 […]

m标志和o标志将被存储在Linux中

我想知道最近收到路由器广播的m标志和o标志的值。 从内核源代码,我知道m标志和o标志被存储。 /* * Remember the managed/otherconf flags from most recently * received RA message (RFC 2462) — yoshfuji */ in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED | IF_RA_OTHERCONF)) | (ra_msg->icmph.icmp6_addrconf_managed ? IF_RA_MANAGED : 0) | (ra_msg->icmph.icmp6_addrconf_other ? IF_RA_OTHERCONF : 0); . . . 然后我相信它必须能够使用ioctl或proc文件系统或任何其他方法来检索这些值。 任何人都可以请指出这一点。

使用ioctl在Linux中获取IPv6地址

我试图在我的Linux操作系统中获得IPv6地址,如下所示: sd = Socket_m(AF_INET6_m, SOCK_DGRAM_m, 0); ifc.ifc_buf = buffer_p; ifc.ifc_len = buffSize; Ioctl_m(sd, SIOCGIFCONF, &ifc); 如果为接口configuration了任何IPv4地址,则它将成功工作,但如果接口只有一个IPv6地址,则不会由ioctl返回。 例如,由于只configuration了IPv6地址,导致无法获得从接口的IPv6地址: br1 Link encap:Ethernet HWaddr 00:10:18:2D:BB:34 inet6 addr: fe80::210:18ff:fe2d:be54/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:194244850 errors:0 dropped:0 overruns:0 frame:0 TX packets:72005 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:12331900995 (11760.6 Mb) TX bytes:6192406 (5.9 Mb)

IPv6:连接()总是与errno 22失败

操作系统是Ubuntu。 我正在做一个基本的IPv6操作的简单testing。 PC通过集线器与IP摄像机(支持IPv6)连接,ping6testing成功。 $ ping6 -I eth1 fe80::240:8cff:fe94:451e PING fe80::240:8cff:fe94:451e(fe80::240:8cff:fe94:451e) from fe80::224:8cff:fe90:ad3b eth1: 56 data bytes 64 bytes from fe80::240:8cff:fe94:451e: icmp_seq=1 ttl=64 time=3.86 ms 64 bytes from fe80::240:8cff:fe94:451e: icmp_seq=2 ttl=64 time=0.471 ms 代码如下: #include <linux/in6.h> #include <sys/socket.h> #include <stdio.h> #include <errno.h> void main() { int s, ret, err; struct sockaddr_in6 addr; s = socket(AF_INET6, SOCK_STREAM, […]

我如何validationICMPv6校验和? (为什么我一直得到0x3fff的校验和?)

我正在开发一个接收IPv6路由器通告包的Linux用户空间程序。 作为RFC4861的一部分,我需要validationICMPv6校验和。 根据我的研究,如果计算IPv6伪头的恭维校验和,结果应该是0xffff,那么大部分是指通常的IP校验和。 但是我一直得到0x3fff的校验和。 我的校验和执行有问题吗? 在将数据包传递给用户空间之前,Linux内核是否validation了ICMPv6校验和? 是否有一个好的参考资料来源,用于testing已知的好的ICMPv6数据包? uint16_t checksum(const struct in6_addr *src, const struct in6_addr *dst, const void *data, size_t len) { uint32_t checksum = 0; union { uint32_t dword; uint16_t word[2]; uint8_t byte[4]; } temp; // IPv6 Pseudo header source address, destination address, length, zeros, next header checksum += src->s6_addr16[0]; checksum += src->s6_addr16[1]; checksum […]

展开一个IPv6地址,以便我可以打印到标准输出

我使用getifaddrs()和inet_ntop()来获取系统上的IP地址。 当系统设置为IPv6时,返回的地址是缩写版本(使用::表示零)。 有什么办法可以把这个地址扩展到完整的吗? 这是我正在使用的代码: struct ifaddrs *myaddrs, *ifa; void *in_addr; char buf[64]; if(getifaddrs(&myaddrs) != 0) { perror("getifaddrs"); exit(1); } for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) continue; if (!(ifa->ifa_flags & IFF_UP)) continue; switch (ifa->ifa_addr->sa_family) { case AF_INET: { struct sockaddr_in *s4 = (struct sockaddr_in *)ifa->ifa_addr; in_addr = […]

如何在Java上支持IPv4和IPv6

我们的一个Java程序启动时,它只能监听IPv6(8080) 例如 # netstat -ntpl Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN – tcp6 0 0 :::8080 :::* LISTEN – tcp6 0 0 :::22 :::* LISTEN – 问题是不能从外部访问(localhost除外),解决这个问题,我有这个手动添加 -Djava.net.preferIPv4Stack=true 但是这使得这个程序只能用于IPv4networking。 是否有可能像上面的sshd一样,都支持IPv4和IPv6?

/ proc中可能的内部套接字状态列表

我想知道/proc/net/tcp中st列的可能值。 我认为st列等于来自netstat(8)或ss(8) STATE列。 我已经设法识别三个代码: sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 0100007F:08A0 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 7321 1 ffff81002f449980 3000 0 0 2 -1 1: 00000000:006F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 6656 1 ffff81003a30c080 3000 0 0 2 -1 2: 00000000:0272 00000000:0000 0A 00000000:00000000 […]