写一个python内网存活主机以及存活端口的扫描脚本
时间: 2024-05-07 21:16:45 浏览: 139
好的,以下是一段简单的 Python 代码来扫描内网中的存活主机和开放的端口。需要注意的是,这个程序需要在具有管理员权限的系统上运行,因为它需要发送 ICMP Echo 请求和 TCP SYN 请求。
``` python
import socket
import struct
import subprocess
import sys
def ping(ip):
# 发送 ICMP Echo 请求
ping_process = subprocess.Popen(
['ping', '-n', '1', '-w', '1000', ip],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# 等待进程结束,获取返回结果
out, error = ping_process.communicate()
if 'TTL=' in out.decode('utf-8'):
return True
else:
return False
def scan(ip, port):
# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
try:
# 发送 TCP SYN 请求
sock.connect((ip, port))
sock.close()
return True
except socket.error:
return False
def main():
# 获取本机 IP 地址
local_ip = socket.gethostbyname(socket.gethostname())
# 扫描内网 IP 地址
for i in range(1, 256):
ip = '{0}.{1}.{2}.{3}'.format(
local_ip.split('.')[0],
local_ip.split('.')[1],
local_ip.split('.')[2],
i
)
# 如果 IP 地址存活则扫描端口
if ping(ip):
for port in range(1, 1025):
if scan(ip, port):
print('{0}:{1} is open'.format(ip, port))
if __name__ == '__main__':
main()
```
这个脚本将扫描本地内网中的 IP 地址和端口,输出存活的主机和开放的端口。你可以根据需要更改代码来定制扫描规则和输出格式。
阅读全文