首页 > 其他分享 >go实现测试端口是否打开

go实现测试端口是否打开

时间:2024-07-16 17:29:35浏览次数:14  
标签:timeout err fmt time 端口 start 测试 address go

package main

import (
	"fmt"
	"net"
	"time"
)

func checkUDPPort(address string, timeout time.Duration) (bool, time.Duration) {
	var conn net.Conn
	var err error
	start := time.Now()
	conn, err = net.DialTimeout("udp", address, timeout)

	if err != nil {
		// fmt.Println("DialTimeout error:", err)
		return false, time.Since(start)
	}
	defer conn.Close()

	// Send a message to the server
	_, err = conn.Write([]byte("Hello, World!"))
	if err != nil {
		// fmt.Println("Write error:", err)
		return false, time.Since(start)
	}

	// Set a deadline for reading
	conn.SetReadDeadline(time.Now().Add(timeout))

	// Try to read from the server
	buf := make([]byte, 1024)
	_, err = conn.Read(buf)
	if err != nil {
		// fmt.Println("Read error:", err)
		return false, time.Since(start)
	}
	return true, time.Since(start)
}

// checkPort 检测端口是否开放
func checkTCPPort(address string, timeout time.Duration) (bool, time.Duration) {
	start := time.Now()
	conn, err := net.DialTimeout("tcp", address, timeout)
	if err != nil {
		// fmt.Println(err)
		return false, time.Since(start)
	}
	conn.Close()
	return true, time.Since(start)
}

func main() {
	ports := []int{22, 23, 53, 80, 443, 10080, 3306, 25}
	addr := "192.168.140.3"
	timeout := 1 * time.Second

	for _, port := range ports {
		address := fmt.Sprintf("%s:%d", addr, port)

		// 检测TCP端口
		isOpen, duration := checkTCPPort(address, timeout)
		fmt.Printf("TCP %s open: %t (checked in %s)\n", address, isOpen, duration)
	}
	for _, port := range ports {
		address := fmt.Sprintf("%s:%d", addr, port)

		// 检测UDP端口
		isOpen, duration := checkUDPPort(address, timeout)
		fmt.Printf("UDP %s open: %t (checked in %s)\n", address, isOpen, duration)
	}
}

注意:

由于UDP协议的无连接特性,单纯发送数据包并等待响应可能无法判断端口是否开放。

许多UDP服务不会响应任何的UDP数据包,而只有在收到特定格式的数据包后才会响应。

可以使用UDP探测工具,例如Nmap,这样的工具能够更好地检测UDP端口的状态。

标签:timeout,err,fmt,time,端口,start,测试,address,go
From: https://www.cnblogs.com/guangdelw/p/18305754

相关文章

  • 超越99%动画!我测试了Luma AI视频的首尾帧,流畅度NO.1?
    关键帧通常用于控制动画中的运动、形状变化、颜色变化、透明度等属性,以及视频和音频编辑中的剪辑、效果和音频级别。最近一段时间,玩可灵AI玩得比较多(国产免费速度快),luma上回写了一篇文章后就没有接着使用(排队生成的时间挺长的)。Luma前段时间新出了首尾帧生成视(比可灵......
  • 【Django】网上蛋糕项目商城-购物车和我的订单功能
    1.购物车功能在首页中的滚动栏的商品,热门商品,新品,以及商品详情中都有加入购物车按钮在models文件中创建购物车表,用于保存当前用户添加的商品信息#购物车表classShoppingCar(models.Model):#用户iduserId=models.IntegerField()#商品idgoodsId=......
  • sysbench测试系统磁盘读写
    版本号:sysbench1.1简介  sysbench除了测试数据库外,还可以用于测试硬盘在不同负载下的性能表现,包括随机读写、顺序读写、随机访问模式、I/O延迟等。原理是通过生成不同的文件I/O负载模式(如顺序读写和随机读写),并根据指定的数据块大小和线程数量,测量系统在这些条件下的读......
  • Go微服务开发指南
    在这篇深入探讨Go语言在微服务架构中的应用的文章中,我们介绍了选择Go构建微服务的优势、详细分析了主要的Go微服务框架,并探讨了服务发现与注册和API网关的实现及应用。关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理......
  • golang使用yaml文件做配置文件
    yaml配置文件host:localhost:3306user:rootpwd:112233dbname:1安装yaml读取工具gogetgopkg.in/yaml.v2从yaml文件读取配置packagemain​import("fmt""gopkg.in/yaml.v2""os")​typeConfstruct{Host string`yaml:"host&qu......
  • 快速部署 HBase 测试环境
    快速部署HBase测试环境第一步:下载软件,在HBase官网下载最新版,找到bin,点击下载,比如我这里下载的是hbase-2.5.6-bin.tar.gz第二步:解压软件$tar-zxvfhbase-2.5.6-bin.tar.gz$cdhbase-2.5.6第三步:启动软件$./bin/start-hbase.sh$./bin/hbase-daemon.shstartthrif......
  • 抢占智能驾驶“智高点”,仿真测试或将是必备的“加速剂”
    ​在智能驾驶系统的开发中,参考V模型开发流程,仿真测试通常包含多个阶段:MIL(模型在环)——用于验证理论模型,软件在环(SIL)——测试软件组件,硬件在环(HIL)——集成硬件组件进行测试,车辆在环(VIL)——模拟车辆与环境的交互,以及实车道路测试(包括封闭场地和开放道路)。 自动驾驶系统......
  • MongoDB综合实战篇(超容易)
    一、题目引入在MongoDB的gk集合里插入以下数据:用语句完成如下功能:(1)查询张三同学的成绩信息(2)查询李四同学的语文成绩(3)查询没有选化学的同学(4)统计语文成绩的平均分(5)查询英语成绩最高的同学(6)求每个同学语数英三门课的总成绩二、解题方案1.表格信息插入db.gk.insert({......
  • 鉴权测试基本知识及测试内容
    ⼀、授权和鉴权的区别?授权:相当于给⼀个通⾏证鉴权:鉴定是否有权访问(判断有没有通⾏证)二、为什么要鉴权?我们如果想要进⼊房⼦之前必须有钥匙,钥匙匹配了我们才能进⼊这个房间,没有鉴权,就好⽐,这房⼦只要有⼈知道在哪⾥,就可以随意的访问和进⼊,你愿意这么做吗?那对于软件⽽⾔,也同样......
  • S3基准测试工具 - Warp使用简介
    本文分享自天翼云开发者社区《S3基准测试工具-Warp使用简介》,作者:y****n1.Warp⼯具简介warp是⼀款开源的S3基准测试⼯具,开源S3项⽬minio下的⼀个⼦项⽬,可以对兼容S3语义的服务进⾏基准测试。2.Warp主要功能及配置常⽤功能有mixed,put,get,analyze等;mixed:是混合读写模式,可以......