Masscan 详细使用教程

Masscan 是一个高效的网络扫描工具,能够快速扫描大量 IP 地址。以下是 Masscan 的详细使用教程,包括所有主要参数和选项。

1. 安装 Masscan

在使用 Masscan 之前,您需要先安装它。可以通过以下命令在 Linux 系统中安装:

1
sudo apt-get install masscan

或者从源代码编译:

1
2
3
4
5
sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan.git
cd masscan
make
make install

2. 基本用法

Masscan 的基本语法如下:

1
masscan <ip范围> -p <端口>

示例:扫描整个 192.168.1.0/24 网段的 80 端口。

1
masscan 192.168.1.0/24 -p80

3. 常用参数

以下是 Masscan 的常用参数及其说明:

3.1 扫描目标

  • <ip范围>: 指定要扫描的 IP 地址范围,例如 192.168.1.0/2410.0.0.1-10.0.0.254

3.2 扫描端口

  • -p <端口>: 指定要扫描的端口,可以是单个端口、多个端口(用逗号分隔)或端口范围。

    1
    2
    3
    -p80               # 扫描80端口
    -p80,443 # 扫描80和443端口
    -p1-100 # 扫描1到100的所有端口

3.3 输出格式

  • -oX <文件名>: 输出为 XML 格式。

    1
    masscan -p80 -oX results.xml
  • -oJ <文件名>: 输出为 JSON 格式。

    1
    masscan -p80 -oJ results.json
  • -oG <文件名>: 输出为 grepable 格式。

    1
    masscan -p80 -oG results.grep
  • -oL <文件名>: 输出为普通文本格式(默认)。

3.4 扫描速率

  • --rate <速率>: 设置每秒发送的包数量,默认值为 10000。

    1
    masscan --rate=1000 <ip范围> -p<端口>

3.5 网络接口

  • --interface <接口名>: 指定要使用的网络接口。

    1
    masscan --interface=eth0 <ip范围> -p<端口>

3.6 排除特定 IP

  • --exclude <ip地址>: 排除特定 IP 地址或范围。

    1
    masscan <ip范围> -p<端口> --exclude <排除的IP>

4. 高级选项

4.1 TCP 标志设置

  • --tcp-flags <flags>: 设置 TCP 标志,例如 SYN、ACK 等。

4.2 自定义数据包大小

  • --packet-size <大小>: 设置自定义数据包大小(默认是无)。

4.3 自定义源端口

  • --source-port <端口>: 指定源端口。

4.4 DNS 查询

  • --dns-server <IP>: 指定 DNS 查询服务器。

示例命令

以下是一些示例命令,展示如何结合使用这些参数:

1
2
3
4
5
6
7
8
# 扫描整个子网的80和443端口,并输出为XML格式
masscan 192.168.1.0/24 -p80,443 -oX scan_results.xml

# 设置扫描速率为5000,排除特定IP,并输出为JSON格式
masscan --rate=5000 --exclude=192.168.1.5 192.168.1.0/24 -p1-100 -oJ scan_results.json

# 指定网络接口并扫描特定IP范围的特定端口
masscan --interface=eth0 --rate=1000 -p22,80,443 10.0.0.1/24

进阶命令

1
2
# 扫描cn2 gia开放443端口的ip
masscan -iL cn2.txt -p443 -oX scan_AS4809_2024-10-6.xml --rate 10000

调用he.net查询ASN IP段,以下是一些常用的ASN

1
2
3
4
5
6
7
8
#CN2
4809
#阿里云
45102
#甲骨文
31898
#搬瓦工
25820

安装python依赖

1
pip install requests BeautifulSoup4

使用python查询asn的ip段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import requests
from bs4 import BeautifulSoup
import csv

# 目标URL
asn = "AS4809"
url = f"https://bgp.he.net/{asn}#_prefixes"

# 获取网页内容
response = requests.get(url)
response.encoding = 'utf-8' # 确保使用utf-8编码
html_content = response.text

# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, "html.parser")

# 找到目标表格
table = soup.find("table", {"id": "table_prefixes4"})

# 准备CSV文件
csv_file = f"{asn}_prefixes.csv"
with open(csv_file, mode="w", newline='', encoding="utf-8") as file:
writer = csv.writer(file)

# 写入表头
headers = ["Prefix", "Description", "Country"]
writer.writerow(headers)

# 写入表格内容
for row in table.find_all("tr")[1:]: # 跳过表头
prefix_cell = row.find("td", {"class": "nowrap"})
description_cell = row.find_all("td")[1]

# 提取前缀
prefix = prefix_cell.find("a").get_text(strip=True)

# 提取描述
description = description_cell.get_text(strip=True).split("\n")[0] # 只取公司名称

# 提取国家信息
country_flag = description_cell.find("img")
if country_flag:
country = country_flag['alt']
else:
country = "Unknown"

# 写入到CSV
writer.writerow([prefix, description, country])

print(f"表格数据已保存到 {csv_file} 文件中。")

注意事项

  • 法律合规:在进行网络扫描时,请确保遵循相关法律法规,避免对目标网络造成影响。
  • 防火墙配置:在某些情况下,防火墙可能会阻止 Masscan 的扫描请求,因此需要进行适当的配置。