我试图以某种方式获取网络上所有已连接设备的列表,然后显示其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。
答案 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
给出了执行命令的计算机网络上所有设备的完整列表。