Web开发人员是否需要关注IPv4的结束?或者这严重是托管级别的关注?
普通的PHP/JavaScript/Ajax等开发人员可以做些什么来减轻转换的影响?
讨论!
(如果在我道歉之前出现这种情况,但我的搜索没有透露)
我用Request.UserHostAddress,只能获取IPv4地址,如何获取访问者的IPv6地址?
我正在为数据库中的网络的各个方面建模.我们正在处理的一个更烦人的问题是创建子网范围,然后确定给定的IP集合是否在这些范围内.我们当前的模型通过以下列说明了IPv4和IPv6之间的差异:
[subnet_sk] [int] IDENTITY(1,1) NOT NULL,
[ipv6_network] [char](39) NULL,
[ipv6_broadcast] [char](39) NULL,
[ipv4_network] [char](15) NULL,
[ipv4_broadcast] [char](15) NULL,
[network_type] [char](4) NOT NULL
Run Code Online (Sandbox Code Playgroud)
上面的模式做了一些重要的假设,这些假设很重要.我们正在利用完全扩展的IP(192.168.001.001vs. 192.168.1.1)进行存储和比较.我们做出这个决定是因为围绕在SQL服务器中以数字方式存储IPv6地址的问题(bigints是无符号的,这意味着我们必须使用六列来表示IPv6).
给定此表模式,可以很容易地编写一个select语句来确定任一类型的IP是否在表中的范围之间:
select *
from subnet
where '1234:0000:0000:0000:fc12:00ab:0042:1050'
between ipv6_network
and ipv6_broadcast
-- or alternatively for IPv4
select *
from subnet
where '192.168.005.015'
between ipv4_network
and ipv4_broadcast
Run Code Online (Sandbox Code Playgroud)
更为困难的是,IP列表确定哪些IP位于子网范围之间.IP列表将由用户输入提供,不存储在数据库中.显然,对于存储在数据库中的数据,我可以进行类似的连接,如下例所示.
例如,用户可以提供1234:0000:0000:0000:fc12:00ab:0042:1050,192.168.001.001和192.168.1.1.我提出的唯一解决方案是使用表值函数来拆分 IP 列表并使用以下之间执行连接:
-- this only covers the IPv4 addresses from the …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常基本的问题,答案相当简单,但我只是想知道是否有人可以澄清为什么我的以太网连接和无线局域网连接有不同的IP地址,而不仅仅是实际机器的一个IP地址?
我正在尝试使用WifiManager和WifiInfo类获取我的手机IP地址.
它返回正确的IP地址反转.
public String getWifiIpAddress() {
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
byte[] ipAddress = BigInteger.valueOf(wi.getIpAddress()).toByteArray();
try {
InetAddress myAddr = InetAddress.getByAddress(ipAddress);
String hostAddr = myAddr.getHostAddress();
return hostAddr;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
结果:73.0.168.192
我试图了解我的活动网络接口IP版本是什么 - IPv4或IPv6.我正在使用下一个说明http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/来测试我的应用程序的IPv6兼容性.
我检查了这里可用的所有资源(例如Swift - 获取设备的IP地址,如何以编程方式获取iphone的ip地址,究竟是什么意思是iOS网络接口名称?什么是pdp_ip?什么是ap?),它有助于获得可用接口列表.当我的iPhone连接到IPv4 WiFi网络时,列表是下一个:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "192.168.1.190";
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
Run Code Online (Sandbox Code Playgroud)
当它连接到IPv6 WiFi网络时,列表是下一个:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "169.254.127.94";
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
Run Code Online (Sandbox Code Playgroud)
在这两种情况下我都有en0/ipv4和en0/ipv6,所以我不清楚如何以编程方式决定我的网络的ip版本实际上是什么.
非常感谢任何帮助.提前致谢.
以下代码以非常快的方式将IP转换为int:
static int ipToInt(int first, int second, int third, int fourth)
{
return (first << 24) | (second << 16) | (third << 8) | (fourth);
}
Run Code Online (Sandbox Code Playgroud)
题
如何使用位移将值转换回IP地址?
如果我有一个IP地址范围(CIDR表示法),我需要知道某个任意IP地址是否在该范围内 - 两者都表示为字符串 - 用C#执行此操作的最简单方法是什么?
例子:
192.168.168.100/24,要检查的IP:192.168.168.200fe80::202:b3ff:fe1e:8329/24,要检查的IP:2001:db8::我有一个大约5000个与IP相关的用户事件的电子表格,我正在尝试使用IP来仅使用Excel公式来确定位置.我日志中的IP结构为"点状四边形"(十进制表示法).
我认为VLOOKUP是这里的方式,所以我下载了WEBNet77的IPV4 IpToCountry数据库,这似乎是一个全面的,最新的资源(有没有更好的资源用于此目的?).该数据库包括大约140K行的IP范围,表单的结构如下:

Colum标签A-G分别为:IP FROM,IP TO,REGISTRY,ASSIGNED,CTRY,CNTRY,COUNTRY.
注意,一个问题:列A到B代表一系列IP,但是它们是"长格式"(我最初没有意识到这一点).因此,在使用这些值作为参考之前,我将必须转换我的虚线四边形.然后,我想为我日志中的每个IP返回Country(G列).
这里有什么帮助?
如果你认为有更好的方法在Excel中查找IP>国家(也许使用网络即http://api.hostip.info/flag.php?ip=xxx.xxx.xxx.xxx),请告诉我.
我看到有16.581.375个环回地址,但几乎每个程序都只使用127.0.0.1。那么为什么会有这么多未使用的地址呢?
IPv4存在很多地址问题,那么为什么人们会浪费这么多IP地址呢?这是有原因的吗?