用python写一个扫描的IP是否存活脚本,写一个扫描端口是否开放的脚本,用函数封装在一个py文件中
时间: 2023-05-26 13:07:06 浏览: 48
以下是使用Python编写的扫描IP地址是否存活的脚本:
```python
import subprocess
def ping_ip(ip_address):
"""
执行ping命令来检查IP地址是否存活
:param ip_address: IP地址
:return: 存活返回True,否则返回False
"""
result = subprocess.run(['ping', '-c', '1', '-w', '1', ip_address],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if result.returncode == 0:
return True
else:
return False
```
以下是使用Python编写的扫描端口是否开放的脚本:
```python
import socket
def check_port(ip, port):
"""
检查指定IP地址上的端口是否开放
:param ip: IP地址
:param port: 端口号
:return: 开放返回True,否则返回False
"""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
try:
result = sock.connect_ex((ip, port))
if result == 0:
return True
else:
return False
except socket.error as e:
return False
finally:
sock.close()
```
将以上两个函数封装在一个py文件中可以这样写:
```python
import subprocess
import socket
def ping_ip(ip_address):
"""
执行ping命令来检查IP地址是否存活
:param ip_address: IP地址
:return: 存活返回True,否则返回False
"""
result = subprocess.run(['ping', '-c', '1', '-w', '1', ip_address],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if result.returncode == 0:
return True
else:
return False
def check_port(ip, port):
"""
检查指定IP地址上的端口是否开放
:param ip: IP地址
:param port: 端口号
:return: 开放返回True,否则返回False
"""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
try:
result = sock.connect_ex((ip, port))
if result == 0:
return True
else:
return False
except socket.error as e:
return False
finally:
sock.close()
if __name__ == '__main__':
# 扫描IP地址是否存活
for i in range(1, 255):
ip = '192.168.1.%s' % i
if ping_ip(ip):
print('%s is alive' % ip)
else:
print('%s is down' % ip)
# 扫描端口是否开放
ip = '192.168.1.1'
for port in range(1, 1025):
if check_port(ip, port):
print('Port %s is open' % port)
```