首页 > 其他分享 >Go黑帽子|TCP扫描器和代理

Go黑帽子|TCP扫描器和代理

时间:2024-06-14 11:12:41浏览次数:20  
标签:扫描器 log err nil fmt TCP Go net Fatal

TCP扫描器

在worker函数中通过net.Dial测试端口连通,并把worker放到go routine中运行,port作为管道在主程序和携程中传递扫描信息

package main

import (
	"fmt"
	"net"
	"sort"
)

func worker(ports chan int, results chan int) {
	for p := range ports {
		address := fmt.Sprintf("127.0.0.1: %d", p)
		conn, err := net.Dial("tcp", address)
		if err != nil {
			results <- 0
			continue
		}
		conn.Close()
		results <- p
	}
}

func main() {
	ports := make(chan int, 100)
	results := make(chan int)
	var openports []int

	for i := 0; i < cap(ports); i++ {
		go worker(ports, results)
	}

	go func() {
		for i := 1; i <= 1024; i++ {
			ports <- i
		}
	}()

	for i := 0; i < 1024; i++ {
		port := <-results
		if port != 0 {
			openports = append(openports, port)
		}
	}

	close(ports)
	close(results)
	sort.Ints(openports)
	for _, port := range openports {
		fmt.Printf("%d open\n", port)
	}
}

TCP代理

建立监听接收来自客户端的消息,通过net.Dial连接目标服务器,并将客户端的消息通过io.Copy复制到目标服务器

package main

import (
	"fmt"
	"io"
	"log"
	"net"
)

func handle(src net.Conn) {
	dst, err := net.Dial("tcp", "192.168.1.52: 8089")
	if err != nil {
		log.Fatal("Unable to connect")
	}
	defer dst.Close()

	go func() {
		if _, err := io.Copy(dst, src); err != nil {
			log.Fatal(err)
		}
	}()

	if _, err := io.Copy(src, dst); err != nil {
		log.Fatal(err)
	}
}

func main() {
	fmt.Println("Waiting for connect")
	listener, err := net.Listen("tcp", ":8080")
	if err != nil {
		log.Fatal(err)
	}

	for {
		conn, err := listener.Accept()
		if err != nil {
			log.Fatal("Unable to accept connection")
		}
		fmt.Println("Accept connection")
		go handle(conn)
	}
}

标签:扫描器,log,err,nil,fmt,TCP,Go,net,Fatal
From: https://www.cnblogs.com/z5onk0/p/18247436

相关文章

  • MongoDB分片(windows电脑系统)
    系统版本:windows10专业版MongoDB:4.4.24分片架构从图中可以看出,分片集群中主要由三个部分组成,即分片服务器(Shard)、路由服务器(Mongos)以及配置服务器(ConfigServer)组成。其中,分片服务器有三个,即Shard1、Shard2、Shard3;路由服务器有两个,即Mongos1和Mongos2;配......
  • MongoDB基本操作(Windows)
    本篇博文介绍知识目标熟悉数据库和集合操作本篇目标掌握MongoDB的部署掌握文档的插入、更新、删除以及查询操作一、MongoDB的安装部署在浏览器输入网址:www.mongodb.com  2. 点击“TRYFREE”或“GETSTARTED”按钮,进入MongoDB的下载页面;3. 在下载页面中,选择适......
  • MongoDB副本集部署(windows)
    环境准备本教程演示mongodb4.4副本集部署(一主两从,伪分布式)节点配置主节点localhost:27017主节点1localhost:27018从节点2localhost:27019 每一个节点(实例)都创建对应的数据文件(data)和日志文件(log)。例如:动实例(服务)语法:bin>mongod-port端口号-dbpath数据路径-logpat......
  • 关于Golang中的依赖注入实现
    先定义一个内部调用接口用于后面的注入//被注入的接口typeUserFaceinterface{Get()stringSet()string}然后定义一个Struct,开启构造函数,并实现上面的接口 typeSysUserstruct{Namestring}//User的构造函数funcNewSysUser(Namestring......
  • Golang性能优化实践
    内存警察警惕一切隐式内存分配典型case:函数返回了字符串、切片,警惕一切字符串传进去的输入,函数内部重新分配了一个新的内存返回对象复用1.sync.pool 保证有一个ch大小的对象可用 假设有cpu核数那么多并发任务,可以保证gc的时候有保底在 2.局部cachesync.pool......
  • Beego仿小米商城RBAC管理模块
    Beego仿小米商城RBAC管理模块原创 Go大神 Go大神 2024-05-2020:38 浙江一、RBAC表结构1、表结构图2、models\manager.gopackagemodelsimport(_"github.com/jinzhu/gorm")typeManagerstruct{IdintUsernamestringPasswordstringMobile......
  • TCP协议的客户端和服务端的多路复用
    #include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<sys/time.h>#include<sys/select.h> intmain(void){   //1.创建套接字......
  • 【Go】用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库
    本文档主要描述通过https://github.com/mutecomm/go-sqlcipher生成和读取SQLCipher加密数据库以及其中踩的一些坑用go去生成读取SQLCipher数据库用gorm去读取SQLCipher数据库在生成后分别用DBeaver、dbbrowser和sqlcipher读取SQLCipher数据库,基础操作见......
  • Go - semaphore
             packagemainimport("context""fmt""os""strconv""time""golang.org/x/sync/semaphore")funcworker(nint)int{square:=n*n......
  • golang reflect 反射机制的使用场景
     Go语言中的reflect包提供了运行时反射机制,允许程序在运行时检查和操作任意对象的数据类型和值。 以下是reflect包的一些典型使用场景: 1.动态类型判断与转换:当需要处理多种类型的变量且具体类型直到运行时才能确定时,可以使用反射来检查变量的实际类型,并在可能的情况......