# 修改说明
在原版基础上增加了 delay 延迟参数,默认值为 220ms,超过该延迟的 ip 将跳过测速   

## 项目简介
这是一个用于测试 IP 地址延迟和下载速度的工具。它可以从指定的文件中读取 IP 地址和端口,并发进行 TCP 连接测试和 HTTP 请求测试,筛选低于延迟阈值的 IP 并进行下载速度测试,也可通过参数设置仅测延迟不测速。最终将结果写入 CSV 文件。

## 核心功能
- **高并发支持**:可设置并发请求的最大协程数,提高检测效率。
- **数据中心位置识别**:通过 Cloudflare 的 cdn-cgi/trace 接口获取数据中心位置信息。
- **延迟阈值**:支持对 IP 进行延迟测试,并筛选低于默认延迟阈值的数据。(**在原版基础上新增的功能**)
- **下载速度测试**:支持对符合条件的 IP 地址进行下载速度测试。
- **结果导出**:将测试结果导出为 CSV 文件,包含 IP 地址、端口、数据中心、地区、国家、城市、延迟和下载速度等信息(全中文化)。

## 安装说明
### 自行编译
确保你已经安装了 Go 环境,然后使用以下命令编译程序:

```bash
git clone https://github.com/yutian81/IP-SpeedTest.git
cd IP-SpeedTest
go build -o iptest main.go
```

### 下载编译好的软件
根据系统和CPU架构选择:  
https://github.com/yutian81/IP-SpeedTest/releases

## 使用说明
### 全参数运行示例
```bash
./iptest -file=ip.txt -outfile=ip.csv -max=100 -speedtest=5 -speedlimit=10 -delay=220 -url=speed.cloudflare.com/__down?bytes=500000000 -tls=true -tcpurl=www.speedtest.net
```

### 推荐运行示例
```bash
./iptest -file=ip.txt -outfile=ip.csv -max=300 -speedtest=3 -speedlimit=5 -delay=200 -url=spurl.api.030101.xyz/50mb
```

### 参数说明
| 参数 | 描述 |	默认值 |
| ---- | ---- |	----- |
-file	| IP 地址文件名称,格式为 ip port,IP 和端口之间用空格隔开	| ip.txt |
-outfile | 输出文件名称 | ip.csv | 
-max | 并发请求最大协程数 | 100 | 
-delay | 延迟阈值(ms) | 220 | 
-speedtest | 下载测速协程数量,设为 0 禁用测速 | 5 | 
-speedlimit | 最低下载速度(MB/s),低于该速度不写入结果 csv 文件 | 0 | 
-url | 测速文件地址,不需要http或https协议头 | speed.cloudflare.com/__down?bytes=500000000 | 
-tls | 是否启用 TLS | true | 
-tcpurl | TCP 请求地址,不需要http或https协议头 | www.speedtest.net | 

### 关于 -file
**-file**:指定包含 IP 地址和端口的文件路径,默认为 `ip.txt`。  
文件格式为每行一个 `IP 地址和端口`,用`空格`分隔,例如:
```
1.1.1.1 80
2.2.2.2 443
3.3.3.3 8080
```

### 关于 -outfile
**-outfile**:测速后输出的 csv 文件,默认为 `ip.csv`。  
输出内容已全部`中文化`(内置在代码中,不依赖外部 `location.json` 文件 )示例输出:
```csv
IP地址,端口,TLS,数据中心,地区,国际代码,国家,城市,网络延迟,下载速度MB/s
192.168.1.1,443,true,LAX,北美洲,US,美国,洛杉矶,50 ms,12.34
192.168.1.2,80,false,SIN,亚太,SG,新加坡,新加坡,100 ms,8.76
```

## 注意事项
- 文件描述符限制:在 Linux 系统上,如果以 root 用户运行,程序会尝试提升文件描述符的上限。如果你遇到文件描述符不足的问题,请确保以 root 用户运行程序。
- 测速文件:默认使用的是 Cloudflare 500m 的测速文件,为了提高测速效率,可以使用其他测速地址,如mingyu大佬的`spurl.api.030101.xyz/50mb`。
- 延迟阈值:通过 `-delay` 参数可以过滤掉延迟较高的 IP 地址,确保只测试低延迟的 IP。

## 依赖
Go 1.16 或更高版本。

## 许可证
本项目基于 MIT 许可证开源。  
本软件按 "原样" 提供,没有任何形式的明示或暗示保证,包括但不限于适销性保证、特定用途适用性保证和非侵权保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面,由于或与软件或使用或其他交易中的软件产生或与之相关的操作。