python写一个扫描当前内网存活主机端口的脚本
时间: 2024-05-07 21:16:44 浏览: 248
好的,您可以试试这个代码:
```python
import socket
def scan_port(ip, port):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
s.connect((ip, port))
s.close()
return True
except Exception:
return False
def scan_ip(ip):
for port in range(1, 1025):
if scan_port(ip, port):
print("Port {} on {} is open".format(port, ip))
if __name__ == '__main__':
ip = socket.gethostbyname(socket.gethostname())
for i in range(1, 255):
scan_ip("192.168.1." + str(i))
```
这个脚本会扫描当前网络下的所有192.168.1.1-192.168.1.255这些IP地址,并且扫描每个IP的1-1024端口,打印出开放的端口号。您可以修改脚本中的IP地址段和扫描端口的范围来满足您的需求。
相关问题
写一个python内网存活主机以及存活端口的扫描脚本
好的,以下是一段简单的 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 地址和端口,输出存活的主机和开放的端口。你可以根据需要更改代码来定制扫描规则和输出格式。
阅读全文