在 Go 中编写 TCP 扫描器以获取乐趣和学习。从网络扫描到服务指纹识别。了解goroutines和channels。
在我们开始之前——不要违反规则
修补我们不拥有的设备是不好的。绝对是个坏主意。始终牢记一些好的建议:
- 不要扫描任何您没有权限的网络
- 不要扫描任何您没有权限的主机
- 此处代码仅供学习
识别哪些设备连接到网络以及它们提供哪些服务本身就是一个完整的主题。
端口扫描
端口扫描是一种机制,用于探测和识别远程计算机上打开的端口以及它提供的指纹服务(如果可能)。这包括 SSH、FTP、Web 服务器或 SQL Server 等。
端口扫描和主机发现通常提到三种技术。这些与ICMP、TCP和UDP相关。所有这些识别网络上主机的技术都有效,每一种技术都各有利弊。
使用 nmap 扫描一千个端口
此示例中的代码不是nmap的替代品。我只想说清楚。只是试图了解如何在golang中编写 TCP 端口扫描程序。
要在nmap中对前 100 个端口进行 TCP 端口扫描,我们需要传递标志-sT,-p然后传递端口列表。这些应该是从 1 到 1024 的端口
time nmap -sT -p 1-1024 192.168.0.42
Starting Nmap 7.91 ( https://nmap.org ) at 2023-01-15 06:40 GMT
Nmap scan report for rpi (192.168.0.42)for rpi (192.168.0.42)
Host is up (0.0062s latency).
Not shown: 1021 closed ports
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tc