给定一个IP地址(比如192.168.0.1),如何在Python中检查它是否在网络中(比如192.168.0.0/24)?
Python中是否有用于ip地址操作的通用工具?像主机查找,ip adddress到int,网络地址与netmask到int等等?希望在2.5的标准Python库中.
如何设置CIDR/IP以便任何人都可以从任何地方访问它?我正在尝试从任何地方访问我的AWS RDS数据库实例,因为我的ISP没有给我一个静态IP.每次我的IP更改我都要更改安全记录.
我正在寻找快速/简单的方法来匹配给定的IP4点分四核IP到CIDR表示法掩码.
我有一堆IP,我需要看看它们是否匹配一系列IP.
例:
$ips = array('10.2.1.100', '10.2.1.101', '10.5.1.100', '1.2.3.4');
foreach ($ips as $IP) {
if (cidr_match($IP, '10.2.0.0/16') == true) {
print "you're in the 10.2 subnet\n";
}
}
Run Code Online (Sandbox Code Playgroud)
会是什么cidr_match()
模样?
它并不一定非常简单,但快速会很好.任何只使用内置/通用功能的东西都是奖励(因为我很可能会让一个人向我展示梨的东西,但是我不能依赖梨或者我的代码所在的地方安装的包部署).
我正在寻找Facebook使用的IP空间的权威列表.我需要这个来支持一个锁定的开发人员环境,该环境对出站连接有非常严格的限制.
今天我发现api和graph.facebook.com开始解析为69.171.224.0/19,这在我之前的过滤器中没有.我已经更新了它,但我想知道我缺少的其他IP空间允许规则.
这就是我目前所拥有的.您可以列出的任何其他IP块都很棒.感谢大家.
69.63.176.0/20
69.171.224.0/19
66.220.144.0/20
204.15.20.0/22
Run Code Online (Sandbox Code Playgroud) 给定CIDR地址,例如 192.168.10.0/24
24
)255.255.255.0
)192.168.10.0
)这里我有一个静态参考我需要检查的范围:
private static List<string> Ip_Range = new List<string>()
{
"12.144.86.0/23",
"31.201.1.176/30",
"46.36.198.101/32",
"46.36.198.102/31",
"46.36.198.104/31",
"46.136.172.0/24",
"63.65.11.0/24",
"63.65.12.0/25",
"63.65.12.128/26",
"63.65.12.192/27",
"63.65.12.224/28",
"63.65.12.240/29",
"63.65.12.248/30",
"63.65.12.252/31",
"63.65.12.254/32",
"65.173.56.0/21",
"67.23.241.179/32",
"67.23.241.180/30",
"67.23.241.184/29",
"67.23.241.192/30",
"67.23.241.196/31",
"67.23.241.198/32",
"72.32.164.56/29",
"72.46.244.32/28",
"74.91.16.48/29",
"74.91.16.208/29",
"74.91.20.48/28",
"74.91.20.64/29",
"74.112.134.120/29",
"74.112.135.104/29",
"74.205.37.16/29",
"78.24.205.32/28",
"98.129.27.88/29",
"98.129.91.40/29",
"166.114.0.0/16",
"167.157.0.0/16",
"174.143.165.80/29",
"186.0.156.0/22",
"186.2.0.0/17",
"186.27.0.0/17",
"190.0.248.0/21",
"190.3.184.0/21"
};
Run Code Online (Sandbox Code Playgroud)
这是我看到它如何工作的一些伪代码:
public static bool IpIsWithinRange(string ip) //Something like 127.0.0.1 or 184.56.26.35
{
IPAddress incomingIp = IPAddress.Parse(ip);
foreach (var subnet in Ip_Range)
{
IPAddress sub = IPAddress.Parse(subnet); ?????
if …
Run Code Online (Sandbox Code Playgroud) 就像是
SELECT COUNT(*) AS c FROM BANS WHERE typeid=6 AND (SELECT ipaddr,cidr FROM BANS) MATCH AGAINST 'this_ip';
因此,您不首先从数据库中获取所有记录,然后逐个匹配它们.
如果c> 0则匹配.
BANS表:
id int auto incr PK
typeid TINYINT (1=hostname, 4=ipv4, 6=ipv6)
ipaddr BINARY(128)
cidr INT
host VARCHAR(255)
Run Code Online (Sandbox Code Playgroud)
DB:MySQL 5
查询时已知IP和IPv6类型(4或6).
IP例如是二进制格式的:: 1
BANNED IP例如是:: 1/64
是否有方法(或函数/类)从CIDR表示法获取IP地址列表?
例如,我有73.35.143.32/27 CIDR并希望以此表示法获取所有IP的列表.有什么建议?
谢谢.
我正在构建一个代表IPv4子网的类.我将网络地址和子网掩码存储为4字节二进制字符串,它们是在构造函数期间根据参数构建的.我希望构造函数接受的表示之一是CIDR表示法.
我的按位操作有点生疏,我遇到的问题是将子网掩码的十进制整数CIDR表示转换为4字节的二进制字符串,反之亦然.我还发现我无法对字符串执行左/右移位 - 我确信之前已经成功完成了?
我已设法转换为二进制字符串以使用以下代码:
// An example input value.
$mask = 24; // 255.255.255.0
if ($mask < 0 || $mask > 32) {
// Invalid prefix size
throw new RangeException('Invalid CIDR prefix size');
} else if ($mask === 0) {
// Handle 0
$mask = "\x00\x00\x00\x00";
} else {
// Left-pad a 4-byte string with $mask set bits
$mask = pack('N', (0x01 << 31) >> ($mask - 1));
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种逻辑有两个原因:
0
视为特例我确信有一种方法能够以一种 …
我一直在寻找一些C#代码来将CIDR表示法(72.20.10.0/24)中的网络转换为IP地址范围,没有太多运气.stackoverlow上有一些关于CIDR的线程,但似乎没有任何C#代码可以覆盖我需要的内容.所以我决定自己做饭,我不希望代码依赖System.Net进行此版本的任何转换.
也许它可能对某人有所帮助.
参考文献:
来自http://www.laffeycomputer.com/whatmask.html的 "Whatmask"C代码
用法:
uint startIP, endIP;
Network2IpRange("72.20.10.0/24", out startIP, out endIP);
Run Code Online (Sandbox Code Playgroud)
代码假设一切都是32位.
static void Network2IpRange(string sNetwork, out uint startIP, out uint endIP)
{
uint ip, /* ip address */
mask, /* subnet mask */
broadcast, /* Broadcast address */
network; /* Network address */
int bits;
string[] elements = sNetwork.Split(new Char[] { '/' });
ip = IP2Int(elements[0]);
bits = Convert.ToInt32(elements[1]);
mask = ~(0xffffffff >> bits);
network = ip & mask;
broadcast = network + ~mask; …
Run Code Online (Sandbox Code Playgroud)