为了和电子设备传输文件,经常会装个FTP软件,我这里常用的是Mixplorer,默认端口2121,用户名为Admin,密码为空。
但是在局域网上IP经常会变,每次都需要手打地址,这里写个脚本,可以自行扫描,然后自动调用FlashFXP打开FTP,极大提升了便利性。
你可以自行更换相关设置。[Python] 纯文本查看 复制代码 import socket
import threading
from queue import Queue
import subprocess
import os
# ===================== 配置项 =====================
# 已设置为你的路径:E:\Network\FlashFXP\FlashFXP.exe
FLASHFXP_PATH = r"E:\Network\FlashFXP\FlashFXP.exe"
PORT = 2121
USERNAME = "Admin"
PASSWORD = ""
TIMEOUT = 0.5
MAX_THREADS = 100
# ==================================================
queue = Queue()
success_hosts = []
def get_local_network():
"""自动获取本机IP,自动计算网段"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.connect(("8.8.8.8", 80))
local_ip = s.getsockname()[0]
finally:
s.close()
parts = local_ip.split('.')
prefix = f"{parts[0]}.{parts[1]}.{parts[2]}."
return prefix
def get_hostname(ip):
try:
return socket.gethostbyaddr(ip)[0]
except:
return "未知主机名"
def open_flashfxp(ip):
"""自动调用FlashFXP连接"""
if not os.path.exists(FLASHFXP_PATH):
print(f"[!] FlashFXP 未找到:{FLASHFXP_PATH}")
return
ftp_url = f"ftp://{USERNAME}:{PASSWORD}@{ip}:{PORT}"
try:
subprocess.Popen([FLASHFXP_PATH, ftp_url])
print(f"[🔗 已打开 FlashFXP 连接:{ip}]")
except Exception as e:
print(f"[❌ 打开失败:{e}]")
def scan_ip(ip):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(TIMEOUT)
if s.connect_ex((ip, PORT)) == 0:
hostname = get_hostname(ip)
success_hosts.append((ip, hostname))
print(f"[✅ 成功] {ip} | {hostname}")
open_flashfxp(ip)
except:
pass
def worker():
while not queue.empty():
scan_ip(queue.get())
queue.task_done()
def main():
print("=" * 60)
print(" 局域网 2121 端口自动扫描 + FlashFXP 自动打开")
print("=" * 60)
prefix = get_local_network()
print(f"[*] 自动识别网段:{prefix}1 ~ {prefix}254")
# 生成IP段 1~254
for i in range(1, 255):
queue.put(prefix + str(i))
# 启动多线程
for _ in range(MAX_THREADS):
t = threading.Thread(target=worker, daemon=True)
t.start()
queue.join()
# 输出结果
print("\n" + "=" * 50)
print(" 扫描完成")
print("=" * 50)
if success_hosts:
for idx, (ip, name) in enumerate(success_hosts, 1):
print(f"{idx}. {ip} - {name}")
else:
print("[❌] 未找到开放 2121 端口的主机")
print("=" * 50)
if __name__ == "__main__": main() |