【问题标题】:Trying to map the 'Private IP' of my computer with python试图用python映射我电脑的“私有IP”
【发布时间】:2016-10-13 14:22:07
【问题描述】:

我想过滤 IPv4 ips 并获取属于我的 LAN(而不是我的 VMware 网络)的一个。 我编码了这个东西:

print re.findall(r'[0-255]\.[0-255]\.[0-255]\.[0-255]', str([y for y in filter(lambda x: 'IPv4 Address' in x, os.popen("ipconfig").readlines())]))

这部分:

str([y for y in filter(lambda x: 'IPv4 Address' in x, os.popen("ipconfig").readlines())])

它首先获得我拥有的 ips(至少它们所在的行。) 例如,就这一行,会给我:

[' IPv4 地址。 . . . . . . . . . . : 192.168.231.1\n', ' IPv4 地址。 . . . . . . . . . . : 192.168.233.1\n', ' IPv4 地址。 . . . . . . . . . . : 10.100.102.8\n']

(前两个是VMware的)

当我执行正则表达式时,它不起作用。 它的目的是只给我我给它的字符串中的 ips。

如何过滤唯一的 LAN ip(在本例中为“10.100.102.8”。)并将其插入字符串?

【问题讨论】:

  • 局域网中的所有地址都应以10. 开头,因此请尝试10.\d{1,3}.\d{1,3}.\d{1,3} 或不使用正则表达式lambda x: 'IPv4 Address. . . . . . . . . . . : 10.' in x
  • 顺便说一句:标准模块ipaddress
  • @furas 你确定吗?因为在这里:en.wikipedia.org/wiki/Private_network 我看到不止一种 ip 类型。其实是三个!另外两个是从 192\171 开始的。所以....
  • 你只问如何识别10.100.102.8。如果您想确定,则必须按照@Goufalite 所说的那样检查网络适配器。

标签: python


【解决方案1】:

小心! [0-255] 不是正则表达式中的数字范围! (其实就是列表0,1,2,5中的一个字符)

如果你想要一个三位数的数字,你应该使用\d{1,3},然后如果你想检查数字是否在范围内,请提取组。

【讨论】:

  • 谢谢!现在。怎么知道局域网ip,扔掉另外两个ip?
  • 正如@furas 评论的那样,使用您的子网域 (10....) 进行检查,或者至少将其放入变量中。但如果此信息发生变化(通用程序),您可能需要解析完整的ipconfig 命令以检查网络适配器...
猜你喜欢
  • 2017-01-24
  • 1970-01-01
  • 2017-06-20
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
相关资源
最近更新 更多