判断一个ip是否在设置的ip段怎么写

2014-02-11 16:38:03 +08:00
 loading
目前写一个应用要针对ip进行简单限制,现在将配置文件写在xx.conf中用ConfigParser读取,现在我是这样写的:

allowIp=['127.0.0.1','ip2','ip2']

使用
if getIp() not in allowIp:
pass

这样比较灵活,但如果一大段地址怎么写呢?如加上掩码的写法要怎么判断在不在里面呢?
192.168.1.1/8
5930 次点击
所在节点    Python
11 条回复
jasontse
2014-02-11 16:39:47 +08:00
ip2long
binux
2014-02-11 16:42:53 +08:00
http://zh.wikipedia.org/wiki/IPv4#.E5.9C.B0.E5.9D.80.E6.A0.BC.E5.BC.8F

/8表示最后8未可以是任意值

然后与一下就好了
dorentus
2014-02-11 17:09:19 +08:00
@binux
x.x.x.x/8 是表示除了前八位(二进制形式),后面的所有位可以是任意值。
dorentus
2014-02-11 17:15:35 +08:00
@dorentus
PS: x.x.x.x/8 里面的 8 其实就是子网掩码啦,/8 等同于 /255.0.0.0。
Ever
2014-02-11 17:19:20 +08:00
ipaddr和netaddr两个库都能很好的处理这个.
loading
2014-02-11 17:25:49 +08:00
@jasontse
@Ever 感谢


@binux
@dorentus
@dorentus 这个怎么会不知道呢…
dorentus
2014-02-11 17:35:33 +08:00
@loading
嗯,我跑题了……

不过不用别的工具的话,binux 的思路其实是可行的。
loading
2014-02-11 17:37:30 +08:00
@binux
@dorentus 嗯,就是太笨,太懒…
nirocfz
2014-02-11 18:00:13 +08:00
ipaddr 有个 Contains 方法
magine
2014-02-12 09:26:56 +08:00
python 有个IPy包
Mutoo
2014-02-12 09:42:26 +08:00
ip/x 是末位子网掩码,不能满足你的需求的话,可以用完整的子网掩码,一般都可以达到目的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/99733

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX