python 扫描主机
时间: 2023-05-30 16:04:25 浏览: 90
以下是一个简单的 Python 脚本,用于扫描指定 IP 地址段中的主机,并检查它们是否在线:
```python
import subprocess
def scan_hosts(ip_range):
for i in range(1, 255):
ip_address = ip_range + str(i)
response = subprocess.Popen(['ping', '-c', '1', '-w', '100', ip_address], stdout=subprocess.PIPE).communicate()[0]
if '1 received' in response.decode('utf-8'):
print(ip_address + ' is online')
else:
print(ip_address + ' is offline')
```
在函数中,我们使用了 subprocess 模块来运行 ping 命令,并检查响应中是否包含“1 received”。如果是,那么主机在线,否则离线。
要使用此函数,只需传递 IP 地址的前三个部分作为参数,例如:
```python
scan_hosts('192.168.1.')
```
此脚本将扫描 192.168.1.1 到 192.168.1.254 之间的所有主机,并在控制台输出其在线或离线状态。
相关问题
python扫描局域网主机
您可以使用Python的`socket`库来扫描局域网内的主机。以下是一个简单的示例代码:
``` python
import socket
def scan_local_network():
ip_prefix = '.'.join(socket.gethostbyname_ex(socket.gethostname())[2][0].split('.')[0:3]) + '.'
for i in range(1, 255):
ip = ip_prefix + str(i)
try:
hostname = socket.gethostbyaddr(ip)[0]
print(f"{ip} ({hostname}) is up!")
except socket.herror:
pass
if __name__ == '__main__':
scan_local_network()
```
该代码会获取本机的IP地址,然后逐个尝试局域网内的IP地址是否能够解析出主机名。如果能够解析出主机名,则说明该主机是存活的。
python扫描局域网主机和端口
您可以使用Python的`socket`库来扫描局域网内的主机和端口。以下是一个示例代码:
``` python
import socket
def scan_local_network(port):
ip_prefix = '.'.join(socket.gethostbyname_ex(socket.gethostname())[2][0].split('.')[0:3]) + '.'
for i in range(1, 255):
ip = ip_prefix + str(i)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(0.1)
result = sock.connect_ex((ip, port))
if result == 0:
try:
hostname = socket.gethostbyaddr(ip)[0]
print(f"{ip} ({hostname}) is up and port {port} is open!")
except socket.herror:
print(f"{ip} is up and port {port} is open!")
sock.close()
if __name__ == '__main__':
scan_local_network(80)
```
该代码会获取本机的IP地址,然后逐个尝试局域网内的IP地址和指定端口是否能够建立连接。如果能够建立连接,则说明该主机的指定端口是开放的。同时,如果能够解析出主机名,则会输出主机名。