Python中本地网络的IP地址/主机名列表
如何在Python中轻松地从本地网络获取IP地址或主机名列表?Python中本地网络的IP地址/主机名列表
这将是最好的,如果它是多平台,但它需要首先在Mac OS X上运行,那么其他人跟随。
编辑:地方我指的是本地网络中的所有活跃地址,如192.168.xxx.xxx
。
所以,如果我的电脑的IP地址(本地网络内)是192.168.1.1
,我有另外三个连接的计算机,我希望它返回的IP地址192.168.1.2
,192.168.1.3
,192.168.1.4
,可能它们的主机名。
如果“本地”你的意思是在同一个网段,那么你必须执行以下步骤:
- 确定自己的IP地址
- 确定自己的网络掩码
- 确定网络范围
- 扫描所有地址(除了最低的,这是您的网络地址和最高的,这是您的广播地址)。
- 使用您的DNS的反向查找来确定响应您的扫描的IP地址的主机名。
或者你可以让Python在外部执行nmap,并将结果传递回你的程序。
如果你知道你的计算机的名称,你可以使用:
import socket
IP1 = socket.gethostbyname(socket.gethostname()) # local IP adress of your computer
IP2 = socket.gethostbyname('name_of_your_computer') # IP adress of remote computer
否则就必须以扫描遵循相同的面具作为你的本地计算机(IP1)的所有IP地址,如规定另一个答案。
我如何得到我的电脑的名称 – 2015-02-13 21:12:58
socket.gethostname()返回计算机的名称 – Mapad 2015-02-18 18:03:53
尝试:
import socket
print [ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1]
这里是一个小工具SCANIP,这将有助于你得到的所有IP地址及其对应的MAC地址的网络(在Linux)英寸 这是用python编写的scanip(IP和Mac扫描仪)的链接。 https://pypi.python.org/pypi/scanip/1.0
您也可以使用PIP在Linux上安装SCANIP,并使用它,在Python创建一个测试文件,并使用它像这 -
import scanip.scanip
scanip.scanip.start_scan()
并运行此程序下载。局域网中的所有IP及其对应的MAC地址都将显示在终端中。
我从其他一些线程收集了以下功能,它在Ubuntu中适用于我。
import os
import socket
import multiprocessing
import subprocess
import os
def pinger(job_q, results_q):
"""
Do Ping
:param job_q:
:param results_q:
:return:
"""
DEVNULL = open(os.devnull, 'w')
while True:
ip = job_q.get()
if ip is None:
break
try:
subprocess.check_call(['ping', '-c1', ip],
stdout=DEVNULL)
results_q.put(ip)
except:
pass
def get_my_ip():
"""
Find my IP address
:return:
"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
return ip
def map_network(pool_size=255):
"""
Maps the network
:param pool_size: amount of parallel ping processes
:return: list of valid ip addresses
"""
ip_list = list()
# get my IP and compose a base like 192.168.1.xxx
ip_parts = get_my_ip().split('.')
base_ip = ip_parts[0] + '.' + ip_parts[1] + '.' + ip_parts[2] + '.'
# prepare the jobs queue
jobs = multiprocessing.Queue()
results = multiprocessing.Queue()
pool = [multiprocessing.Process(target=pinger, args=(jobs, results)) for i in range(pool_size)]
for p in pool:
p.start()
# cue hte ping processes
for i in range(1, 255):
jobs.put(base_ip + '{0}'.format(i))
for p in pool:
jobs.put(None)
for p in pool:
p.join()
# collect he results
while not results.empty():
ip = results.get()
ip_list.append(ip)
return ip_list
if __name__ == '__main__':
print('Mapping...')
lst = map_network()
print(lst)
不,我不想要我的IP地址,我想每个人都有。什么史蒂夫莫耶尔说过,但与代码:) – 2008-10-16 10:08:52