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

news2024/9/22 7:37:52

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.coloradmin.cn/o/2086292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

给自己复盘的随想录笔记-哈希表

哈希表理论基础 哈希表 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。 将学生姓名映射到哈希表上就涉及到了hash function ,也就是哈希函数。 哈希函数 如果hashCode得到的数值大于 哈希表的大小了,也就…

【Qt】QLCDNumber | QProgressBar | QCalendarWidget

文章目录 QLCDNumber —— 显示数字QLCDNumber 的属性QLCDNumber 的使用 QProgressBar —— 进度条QProgressBar 的属性创建一个进度条修改为 红色的进度条 QCalendarWidget —— 日历QCalendarWidget 的属性QCalendarWidget 的使用 QLCDNumber —— 显示数字 QLCDNumber 的属…

Nuxt3入门:介绍、项目安装和了解视图(第一节)

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。 有对 Nuxt3.0 感兴趣的小伙伴吗?一起来了解下 一、介绍 Nuxt is an open source framework that makes web development intuitive and powerful. Create performant and production-grad…

通过 pnpm 安装依赖包会发生什么

通过 pnpm 安装依赖包会发生什么 通过 pnpm 下载的包都是放在一个全局目录(.pnpm-store)下,默认是在 ${os.homedir}/v3/.pnpm-store,如果我们不确定在哪里,可以输入下面的命令手动配置: pnpm set store-d…

数据库文件(嵌入式)

一、数据库文件与普通文件区别 1、普通文件对数据管理(增删改查)效率低 2、数据库对数据管理效率高,使用方便 二、常用数据库 1、关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型&#x…

Java 入门指南:Java NIO —— Channel(通道)

NIO 的引入 在传统的 Java I/O 模型(BIO)中,I/O 操作是以阻塞的方式进行的。当一个线程执行一个 I/O 操作时,它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈,因为需要为每个连接创建一…

哈工大-操作系统L29

从生磁盘到文件 通过文件使用磁盘更加直观方便 一.映射的左右与实现 1.映射作用 如何从文件得到盘块号,用户看到的字符流,而操作系统看见的是盘块,所以建立字符流到盘块的映射 读写:电梯队列到内存缓冲区中,修改然后再放到电梯队列写出去 操作系统负…

web渗透:信息收集常用的工具

目录 如何根据特定网站的特性选择合适的信息收集工具? 网络安全专业人士通常会使用哪些信息收集工具进行漏洞挖掘? 数据分析师在进行市场研究时通常使用哪些信息收集工具? 数据收集工具 数据处理工具 数据分析工具 数据呈现工具 思维导…

艺术家林曦:“高枕无忧”的生活,需要遇见更好的自己

多年前,林曦老师在与朋友的交谈中,曾提到“想过高枕无忧的生活”。那种身心安逸、无所忧虑,坦然面对自己的状态,想来着实愉快。      或许,当焦虑变为当今社会难以避免的课题,“高枕无忧”才更成了我们…

数据结构:栈、队列详解篇

数据结构:栈、队列详解篇 一、栈(一)栈的概念(二)栈的实现1、结构定义2、功能实现(1)栈的初始化(2)栈的销毁(3)栈的扩容(4&#xff09…

【大模型从入门到精通46】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流3

这里写目录标题 功能概览函数定义实践示例:测试适当的拒绝最佳实践与建议适用于科学测验测试的修订函数科学测验测试函数定义执行与评估最佳实践与注意事项 功能概览 evaluate_request_refusal 函数模拟了系统应该基于预定义的标准拒绝生成测验的情景,这…

推荐9款AI论文写作推荐的论文指导!快速生成高质量初稿

在当前的学术写作领域,AI论文写作工具已经成为许多研究人员和学生的重要助手。这些工具不仅能够帮助用户快速生成高质量的论文初稿,还能在一定程度上简化学术写作流程,提高写作效率。以下是九款被广泛推荐的AI论文写作工具,它们各…

Docker续1:docker使用

一、打包传输 1.打包 [rootlocalhost ~]# systemctl start docker [rootlocalhost ~]# docker save -o centos.tar centos:latest [rootlocalhost ~]# ls anaconda-ks.cfg centos.tar 2.传输 [rootlocalhost ~]# scp centos.tar root192.168.1.100:/root 3.删除镜像 [r…

付费自习室管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,类型管理,自习室管理,订单管理,系统管理 微信端账号功能包括:系统首页,自习室,我的 …

python-旋转木马(赛氪OJ)

[题目描述] 我们要做一个旋转木马! 输入一个 nn 的字符矩阵,将其顺时针旋转 90 度后输出。输入格式: 输入共 n1 行。 第一行一个整数 n,表示矩阵大小。 接下来 n 行,每行一个长度为 n 的字符串,仅包含小写字…

Linux高性能服务器编程 总结索引 | 第2章:IP协议详解

IP头部信息 IP数据报的路由和转发 1、IP 服务的特点 1、IP 协议是 TCP/IP 协议族的动力,它为上层协议提供 无状态、无连接、不可靠的服务 2、无状态 是指 IP 通信双方不同步传输数据的状态信息,因此 所有 IP 数据报的发送、传输和接收都是相互独立、没…

【Linux应用编程实战】常见函数应用

介绍一些Linux应用编程实战遇到的,常见要用的函数,进行概况总结。 目录 main() lseek() poll() struct pollfd 结构体返回值典例 mmap() munmap(…

kylin-麒麟操作系统-安装内存泄露补丁-以及kylin-kms-activation.service服务不断重启解决思路

文章目录 前言1. 问题现象1.1 使用journalctl命令查看更详细的日志信息 2. 解决思路2.1 思路一:2.2 思路二:2.3 合理的解法: 3. 扩展-修复内存泄露3.1 查看自己使用的镜像3.2 到麒麟官网下载相应的补丁包3.3 安装步骤3.4 重启kylin-kms-activation.servi…

python如何另起一行

python 字符串换行的三种方式: 第一种:三个单引号 print 我是一个程序员 我刚开始学习python 第二种:三个双引号 print """ 我是一个程序员 我刚开始学习python""" 第三种:\结尾 print "我是…

生成式AI,搜索赛道的又一个黄金十年

文|白 鸽 编|王一粟 随着生成式AI的发展,搜索引擎正在被重构,越来越多玩家开始布局AI搜索赛道。 一方面,传统搜索引擎/浏览器正借助AI技术的重构重新焕发生机,无论是移动端还是PC端,都在抢占…