当前位置: 首页 > article >正文

【亲测有效】icmp,tcpping工具源码

icmp,tcpping工具源码

import socket
import subprocess
import platform
import time
import sys


def icmp_ping(host, count=4):
    param = '-n' if platform.system().lower() == 'windows' else '-c'

    try:
        # 执行 ping 命令
        result = subprocess.run(['ping', param, str(count), host], capture_output=True, text=True)

        # 输出 ICMP ping 结果并及时刷新
        if result.returncode == 0:
            print(f"ICMP Ping {host} 成功!")
            print(result.stdout)
        else:
            print(f"ICMP Ping {host} 失败!")
            print(result.stderr)

        sys.stdout.flush()

    except Exception as e:
        print(f"执行 ICMP ping 命令时发生错误: {e}")
        sys.stdout.flush()


def tcp_ping(host, port, timeout=2):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(timeout)

        start_time = time.time()
        sock.connect((host, port))
        end_time = time.time()

        connection_time = end_time - start_time

        print(f"TCP Ping {host}:{port} 成功!连接时间: {connection_time:.4f} 秒")

        sock.close()

    except socket.timeout:
        print(f"TCP Ping {host}:{port} 失败!连接超时")
    except ConnectionRefusedError:
        print(f"TCP Ping {host}:{port} 失败!连接被拒绝")
    except Exception as e:
        print(f"执行 TCP ping 时发生错误: {e}")

    # 及时刷新标准输出
    sys.stdout.flush()


def main():
    # 执行初始的 ICMP 和 TCP ping 操作
    initial_host = 'www.qq.com'
    print(f"正在测试初始主机: {initial_host}")
    icmp_ping(initial_host)
    tcp_ping(initial_host, 80)

    # 等待用户输入域名、网址或 IP 地址进行测试
    while True:
        user_input = input("请输入要测试的域名、网址或 IP 地址 (输入 'exit' 退出): ")
        if user_input.lower() == 'exit':
            print("退出程序。")
            break

        # 用户输入端口号
        port_input = input("请输入端口号(默认为 80,直接回车跳过):")
        port = 80  # 默认端口

        if port_input.strip():  # 如果用户输入了端口号
            try:
                port = int(port_input.strip())
            except ValueError:
                print("端口号无效,将使用默认端口 80")
                port = 80

        # 执行 ICMP 和 TCP ping 操作
        print(f"正在测试用户输入主机: {user_input},端口: {port}")
        icmp_ping(user_input)
        tcp_ping(user_input, port)


if __name__ == '__main__':
    main()

使用效果:


http://www.kler.cn/a/282270.html

相关文章:

  • Javascript——设计模式(一)
  • react中如何在一张图片上加一个灰色蒙层,并添加事件?
  • 【Linux庖丁解牛】—Linux基本指令(下)!
  • LeetCode 90-子集Ⅱ
  • 代码随想录第46期 单调栈
  • .Net Core根据文件名称自动注入服务
  • 关于vue2运行时filemanager-webpack-plugin报错isFile is undefind
  • mysql数据库数据的批量插入
  • js传递long类型存在精度丢失
  • SpringBoot日志管理 —— 解决Logback生成 “LOG_PATH_IS_UNDEFINED“ 文件夹问题
  • webpack4手动搭建Vue项目
  • 光学涡旋Talbot阵列照明器的matlab模拟与仿真
  • 深入理解 Go 语言并发编程之系统调用底层原理
  • 用宝塔部署项目到阿里云服务器访问不到的问题
  • 【TCGA】将TCGA数据移动到一个文件夹下
  • webgl入门
  • 『功能项目』着色器光透魔法球Shaders【09】
  • centos 7部署nacos 2.4.1版本单点方式
  • 在Android中在当前应用程序中安装另外一个应用程序
  • ssrf做题随记--任务计划的写入、csrf简单知识
  • 当不显示定义默认成员函数,会出现什么状况
  • 【Linux】系统管理(第六篇)
  • Vue路由—进阶篇
  • Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)
  • [Backbone]CAS-ViT: Convolutional Additive Self-attention Vision Transformers
  • 【SpringCloud应用框架】GateWay网关