# EncrypDNS **Repository Path**: tanghao_HIT/encryp-dns ## Basic Information - **Project Name**: EncrypDNS - **Description**: ESNI、ECH、DoT、DoH等域名系统等加密协议流量仿真 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-03-31 - **Last Updated**: 2025-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 加密域名解析流量仿真与表征系统 本系统实现了对DoH、ESNI和ECH三种加密域名解析流量的仿真,并能够对仿真流量进行捕获并以pcap文件的形式进行存储。针对捕获的流量,表征部分能够对pcap文件进行分流,并针对每个单个流提取侧信道特征。 系统中各部分具体实现如下: 模拟客户端使用域名数据集中的域名构造DNS解析请求,并经由与代理服务器之间通过加密协议(DoH/ESNI/ECH)形成的加密通道发送至代理服务器,随后等待代理服务器返回的加密域名解析应答。在整个过程中,模拟客户端会捕捉与代理服务器之间的所有加密域名解析流量,以pcap文件的形式进行存储。 代理服务器等待与客户端之间形成的加密通道传送来的DNS解析请求,将明文形式的DNS解析请求转发至互联网上真实的DNS解析服务器,随后将DNS解析服务器返回的明文DNS响应再经由与客户端之间的加密通道传回客户端,从而完成模拟真实的加密域名解析服务器的过程。 DNS服务器选择目前互联网上主要的提供传统的域名解析服务的服务器,系统在具体实现中选择了114 DNS(114.114.114.114)和Ali DNS(223.5.5.5)。 ### 目录 [TOC] ### 运行环境 仿真部分:ubuntu 20.04.1 go1.13(ESNI协议仿真) go1.24(DoH、ECH协议仿真) 表征部分:windows10 python3.8 ### 文件目录说明 ``` source │ │ ├─client //代理客户端 │ ├─doh //DoH协议 │ │ client.go │ │ go.mod │ │ go.sum │ │ server1.crt │ │ server2.crt │ │ │ ├─ech //ECH协议 │ │ client.go │ │ go.mod │ │ go.sum │ │ server1.crt │ │ server2.crt │ │ │ ├─esni //ESNI协议 │ │ client.go │ │ esni.pub │ │ go.mod │ │ go.sum │ │ order.txt │ │ server1.crt │ │ server2.crt │ │ │ ├─https-doh //Https协议 │ │ client.go │ │ server1.crt │ │ server2.crt │ │ │ ├─https-ech //应用ECH扩展的Https协议 │ │ client.go │ │ go.mod │ │ server1.crt │ │ server2.crt │ │ │ └─https-esni //应用ESNI扩展的Https协议 │ client.go │ esni.pub │ go.mod │ go.sum │ server1.crt │ server2.crt │ ├─dataset //加密域名解析流量特征数据集 │ doh-https.csv │ doh.csv │ ech-https.csv │ ech.csv │ esni-https.csv │ esni.csv │ ├─feature_process //流量特征提取 │ feature_process.py //特征提取 │ traffic_process.py //流量分流 │ ├─server //代理服务器 │ ├─doh //DoH协议 │ │ go.mod │ │ go.sum │ │ openssl-server1.cnf │ │ openssl-server2.cnf │ │ server.go │ │ server1.crt │ │ server1.csr │ │ server1.key │ │ server2.crt │ │ server2.csr │ │ server2.key │ │ │ ├─ech //ECH协议 │ │ ecdh_private_key.pem │ │ echutil.go │ │ go.mod │ │ go.sum │ │ openssl-server1.cnf │ │ openssl-server2.cnf │ │ server.go │ │ server1.crt │ │ server1.csr │ │ server1.key │ │ server2.crt │ │ server2.csr │ │ server2.key │ │ │ ├─esni //ESNI协议 │ │ │ esni │ │ │ esni.pub │ │ │ go.mod │ │ │ go.sum │ │ │ openssl-server1.cnf │ │ │ openssl-server2.cnf │ │ │ order.txt │ │ │ server.go │ │ │ server1.crt │ │ │ server1.csr │ │ │ server1.key │ │ │ server2.crt │ │ │ server2.csr │ │ │ server2.key │ │ │ │ │ └─esnitool │ │ esnitool.go │ │ │ ├─https-doh //Https协议 │ │ openssl-server1.cnf │ │ openssl-server2.cnf │ │ server.go │ │ server1.crt │ │ server1.csr │ │ server1.key │ │ server2.crt │ │ server2.csr │ │ server2.key │ │ │ ├─https-ech //应用ECH扩展的Https协议 │ │ ecdh_private_key.pem │ │ echutil.go │ │ go.mod │ │ go.sum │ │ openssl-server1.cnf │ │ openssl-server2.cnf │ │ server.go │ │ server1.crt │ │ server1.csr │ │ server1.key │ │ server2.crt │ │ server2.csr │ │ server2.key │ │ │ └─https-esni //应用ESNI扩展的Https协议 │ │ esni │ │ esni.pub │ │ go.mod │ │ go.sum │ │ openssl-server1.cnf │ │ openssl-server2.cnf │ │ server.go │ │ server1.crt │ │ server1.csr │ │ server1.key │ │ server2.crt │ │ server2.csr │ │ server2.key │ │ │ └─esnitool │ esnitool.go │ go.mod │ go.sum │ └─traffic_capture //流量捕获 capture.py ``` ### 部署与运行 代理服务器: ​ 证书生成命令: ``` openssl genrsa -out server1.key 2048 openssl req -new -key server1.key -out server1.csr -config openssl-server1.cnf openssl x509 -req -in server1.csr -signkey server1.key -out server1.crt -days 365 -extensions v3_req -extfile openssl-server1.cnf ``` ​ 服务器运行命令: ``` sudo -E go run server.go ``` ​ ESNI代理服务器运行时额外运行: ``` export GOROOT=$(pwd)/.GOROOT ``` ​ ESNI密钥生成命令: ``` go run esnitool.go -esni-keys-file ./esni.pub -esni-private-file ./esni -validity 24h ``` 代理客户端: ​ 运行命令: ``` sudo -E go run client.go -域名数据集位置- ``` ​ ESNI代理客户端额外运行: ``` export GOROOT=$(pwd)/.GOROOT ``` 流量处理: ​ 流量分流: ``` python.exe .\traffic_process.py -i 原始pcap文件夹 -o 分流后pcap文件夹 ``` ​ 特征提取: ``` python.exe .\feature_process.py -p pcap文件夹 -d 数据集文件夹 -l 流量标志 ```