Python列出本地网络上的所有设备以及IP地址

时间:2018-06-23 13:11:03

标签: python python-3.x networking nmap

我试图以某种方式获取网络上所有已连接设备的列表,然后显示其IP。我希望它显示如下内容:

function GroceryItem(id, initial) {
  this.id = id;
  this.data = initial;
  this.update = function(key, value) {
    this.data[key] = value;
  }
  this.delete = function(key) {
    return delete this.data[key];
  }
  this.getSortValue = function() {
    return this.data.price;
  }
}

function GroceryList(initial) {
  this.items = {}
  for(let id in initial) {
    this.items[id] = new GroceryItem(id, initial[id]);
  }
  this.delete = function(id) {
    return delete this.items[id];
  }
  this.update = function(id, key, value) {
    this.items[id].update(key, value);
  }
  this.add = function(id, data) {
    this.items[id] = new GroceryItem(id, data);
  }
  this.getSorted = function() {
    return Object
      .entries(this.items)
      .sort((a, b) => a[1].getSortValue() - b[1].getSortValue())
      .map(i => [i[0], i[1].data]);
  }
}

let a = new GroceryList({'234324':{price:20}, '42434':{ price:10}, '6456':{price:30}});

console.log(JSON.stringify(a.getSorted()));
a.add('45678', {price: 25});
console.log(JSON.stringify(a.getSorted()));
a.delete('234324');
console.log(JSON.stringify(a.getSorted()));
a.update('6456', 'price', 15);
console.log(JSON.stringify(a.getSorted()));

我尝试过nmap,但很长一段时间后我仍然可以使用它,但是它不起作用。

我正在使用Python 3.6.5,Windows 8.1。

如果有人可以回答,那将会有很大帮助。

编辑:我之前确实去过here,但是我不确定如何使用该方法列出名称和IP。

1 个答案:

答案 0 :(得分:0)

您可以使用命令arp -a并抓取os.popen的结果:

import os, re
full_results = [re.findall('^[\w\?\.]+|(?<=\s)\([\d\.]+\)|(?<=at\s)[\w\:]+', i) for i in os.popen('arp -a')]
final_results = [dict(zip(['IP', 'LAN_IP', 'MAC_ADDRESS'], i)) for i in full_results]
final_results = [{**i, **{'LAN_IP':i['LAN_IP'][1:-1]}} for i in final_results]

示例输出:

[{'IP': '?', 'LAN_IP': '192.168.1.4', 'MAC_ADDRESS': '11:1a:ec:da:d4:ee'}, ...]

arp -a给出了执行命令的计算机网络上所有设备的完整列表。