我在asp.net应用程序中有一些代码需要获取客户端计算机的ipv4地址(用户都在我们自己的网络上).最近我们将应用程序运行的服务器升级到Windows 2008服务器.现在,当客户端在较旧的操作系统上时,Request.UserHostAddress代码返回ipv4,而当它们在较新的操作系统(Vista和更高版本)上时,返回ipv6.因此,依赖于此的功能适用于某些客户而非其他客户.
我添加了应该从ipv6转换为ipv4的代码,以尝试解决此问题.这是来自这个在线教程:http://www.4guysfromrolla.com/articles/071807-1.aspx.我正在使用dsn.GetHostAddress然后循环返回的IP寻找一个"InterNetwork"
foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
if (IP4Address != String.Empty)
{
return IP4Address;
}
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
Run Code Online (Sandbox Code Playgroud)
问题是这不适合我.从ipv4连接的客户端继续返回客户端计算机的正确ipv4 IP,但是从Vista和Windows 7连接的客户端返回SERVER计算机的ipv4 IP而不是客户端计算机.
根据几个国家/地区的法律要求,我们会在日志文件中匿名化用户的IP地址.使用IPv4我们经常只对最后两个字节进行匿名化,例如.而不是255.255.255.255我们记录255.255.*.*
您建议使用什么算法来匿名化IPv6地址?
getaddrinfo调用有许多有趣的标志.我想知道AI_V4MAPPED标志的用途是什么.在没有系统的情况下,我似乎能够获得getaddrinfo来生成:: ffff:nnnn表单地址,正如我在设置此标志时所期望的那样.我期待错误的事吗?我看到了虫子吗?
特别是,如果我要求AF_INET6系列地址并指定AI_V4MAPPED,我希望看到只有DNS A(IPv4地址)记录的主机的:: ffff:nnnn地址.我通常也会期望,如果我指定AI_ALL,我将获得主机的DNS AAAA(IPv6地址)记录和:: ffff:nnnn形式的DNS A记录.
我再次期待这里所有错误的事情吗?
我在Fedora 11上测试了这个 - glibc 2.10.1和OS X 10.4.
我想创建一个32位的哈希值.我有16字节的源和目标ipv6地址和2字节的源和目标端口号.
32位输出=(Src IP,Dst Ip,Src端口,目标端口)
如果散列函数沿32位空间很好地分配实体会更好.我想将结果用作索引.
重考
我想知道是否有办法使用python来解析仅在ipv6中解析的主机名和/或解析在ipv4和ipv6中解析的主机名?
socket.gethostbyname()并且socket.gethostbyname_ex()不适用于ipv6解析.
一个虚拟的方法是运行实际的linux主机命令并解析结果.有没有更好的方法呢?
谢谢,
如何将包含ipv6的机器数据包目标的String转换为16字节数组?我知道getBytes和编码,但我似乎无法理解我应该使用哪种编码,或者我是否必须将该字符串转换为十六进制.
String ipv6 = "2001:0DB8:AC10:FE01:0000:0000:0000:0000";
byte[] bytes = ipv6.getBytes(); //must be a 16 byte array
Run Code Online (Sandbox Code Playgroud)
我想做的一个例子,仅举例说明.Obs.:我必须将String转换为16字节数组谢谢
是IPv6的地址区分大小写?
2001年:0:5ef5:石川铃华:B5:9ca5:A266:e068
VS
2001年:0:5EF5:石川铃华:B5:9CA5:A266:E068
我猜它们都是正确的,但我需要确定.
在OpenBSD的手动状态:
出于安全原因,OpenBSD不会将IPv4流量路由到AF_INET6套接字,并且不支持IPv4映射地址,其中IPv4流量被视为来自IPv6地址,如:: ffff:10.1.1.1.如果需要接受IPv4和IPv6流量,请在两个插槽上进行侦听.
但是,没有关于这些"安全原因"的解释.这些是什么?我想不出任何与该映射相关的安全问题.
使用此消息拒绝的应用程序版本之一您的应用程序在连接到IPv6网络的运行iOS 11.2.5的iPad或iPhone上崩溃.问题是应用程序没有单一的网络功能或功能,所以我无法理解发生了什么.
这是应用程序的第4版,旧版本已经存储.在最后一个版本中,我们刚刚删除了一个问题,导致应用程序在新的iOS版本中失败文本.
我需要为我的 docker 容器启用 IPv4/IPv6 双栈支持。我的 docker compose 文件是版本 3。默认情况下启用 IPv4,但如何为我的 docker 容器/网络启用 IPv6?
我已经尝试通过更新 daemon.json 来更新 docker 守护进程,我知道更新正在被识别,因为如果文件中有错误,Docker 将不会启动。进行更改后,我重新启动了 Docker(不仅仅是我的容器),但我的容器仍然没有 IPv6 地址。
我发现enable_ipv6: truedocker compose 文件对版本 3 或更高版本无效,我不想按文件版本降级。
我更新的 daemon.json:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
Run Code Online (Sandbox Code Playgroud)
当我检查我的容器时,在对 daemon.json 进行更改后,使用 docker inspect {id} 我看到以下内容:
"NetworkSettings": {
"Bridge": "",
"SandboxID": "df737362d15722fc1b0501ac256ba371417fe513dede807f2a17bd0524630a31",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"9000/tcp": null
},
"SandboxKey": "/var/run/docker/netns/df737362d157",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0, …Run Code Online (Sandbox Code Playgroud)