使用python实现端口连通性探测

背景

公司需要添加新的网段,所以需要对业务所有的机器进行端口探测,看是否需要放开iptables以及安全组,以下是脚本,大家修改后就可以使用

python 复制代码
from datetime import datetime
import socket
import logging
def log_format():
    # 输出到console
    ch_formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    ch = logging.StreamHandler()
    ch.setLevel(logging.INFO)  # 指定被处理的信息级别为最低级INFO,低于level级别的信息将被忽略
    ch.setFormatter(ch_formatter)
    # 输出到file
    formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    fh = logging.FileHandler(filename="./output_%s.log" % (datetime.now().strftime('%Y%m%d')), mode='w',
                             encoding='utf-8')  # 不拆分日志文件,a指追加模式,w为覆盖模式
    fh.setLevel(logging.INFO)
    fh.setFormatter(formatter)

    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    logger.addHandler(ch)
    logger.addHandler(fh)
    return logger



def probe(ip, port=22, timeout=5):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(timeout)
    try:
        sock.connect((ip, port))
        return True
    except (socket.timeout, ConnectionRefusedError):
        return False
    finally:
        sock.close()

now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
result_file_name = f'/root/jarvisyqliu/result_{now}.txt'
log_format()
with open('/root/jarvisyqliu/ip.txt', 'r') as ip_file:
    for line in ip_file:
        ip = line.strip()
        logging.info(f'scaning...{ip}')
        with open(result_file_name, 'a') as result_file:
            if probe(ip):
                result_file.write(f'{ip} ok\n')
            else:
                result_file.write(f'{ip} error\n')
相关推荐
qy-ll1 分钟前
Leetcode100题逐题详解
数据结构·python·学习·算法·leetcode
2301_764441332 分钟前
基于python与Streamlit构建的卫星数据多维可视化分析
开发语言·python·信息可视化
陈奕昆4 分钟前
n8n实战营Day3课时3:库存物流联动·全流程测试与异常调试
人工智能·python·n8n
weixin_457760004 分钟前
DefaultCPUAllocator: can‘t allocate memory
python·神经网络
测试人社区-小明6 分钟前
测试金字塔的演进:如何构建健康的自动化测试套件
python·测试工具·数据挖掘·pycharm·机器人·github·量子计算
敬往事一杯酒哈9 分钟前
1.3 Ros2快速体验
python·ros2
杨超越luckly10 分钟前
HTML应用指南:利用GET请求获取全国瑞思教育门店位置信息
前端·python·arcgis·html·门店数据
haiyu_y14 分钟前
Day 36 MLP神经网络的训练
python·深度学习·神经网络
rockingdingo17 分钟前
利用 OneKey MCP Router Python SDK构建多领域大模型Function Call多工具调用数据集
网络·windows·python·ai agent·mcp
我送炭你添花18 分钟前
Pelco KBD300A 模拟器:01.Pelco 协议前世今生 & KBD300A 键盘基础解析
网络·python·计算机外设·pyqt