https://github.com/ormissia/go-tcp-scanner
tcp端口扫描器
https://github.com/ormissia/go-tcp-scanner
Last synced: 4 months ago
JSON representation
tcp端口扫描器
- Host: GitHub
- URL: https://github.com/ormissia/go-tcp-scanner
- Owner: ormissia
- License: mit
- Created: 2020-12-26T07:58:54.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-12-28T09:32:05.000Z (over 4 years ago)
- Last Synced: 2025-01-02T07:44:49.877Z (5 months ago)
- Language: Go
- Size: 7.81 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 一个简单的端口扫描器
> 自己也经常搭一些服务器之类的东西,有时需要查看一下端口开放情况。网上搜了一下太乱了,大多数网页的那种不能批量扫描,又或者是要收费,而且我也不需要很复杂的功能,因此自己简单写了一个。
使用方法:程序打包成可执行文件以tcp-scanner命名为例,执行命令`tcp-scanner 127.0.0.1 1 10000`,第一个参数为要扫描的ip,第二个参数为起始端口号,第三个参数为终止端口号。
思路:使用`net.Dial("tcp", address)`进行端口扫描,当返回结果中error为空时即为本次扫描地端口为开放,但是使用单线程进行扫描效率极低。
因此需要用goroutine并发地进行端口扫描,而当单次扫描端口数量过多(达到几亿以上地时候)创建大量goroutine会因系统资源不足而卡死(当然扫个端口不会需要这么高并发😂)。
为了避免这种情况,使用channel缓冲区来实现。创建固定数量的goroutine,然后通过channel向其中发送需要扫描的端口号。
而每当一个goroutine扫描结束后再通过一个channel将扫描结果返回,失败返回0,成功则返回端口号,统计不为0的结果,最后输出。