پیشنیازها
ابتدا باید پیشنیازهایی وجود داشته باشند که به ترتیب توضیح داده خواهند شد:
- دانلود اپ اسکنر ویندوز از [گیتهاب پروژه](https://github.com/MortezaBashsiz/CFScanner/tree/main/windows)
- اپ .NET Desktop Runtime 6 را نصب کنید از سایت اصلی برنامه که در زیر آورده شده
```
https://dotnet.microsoft.com/en-us/download/dotnet/6.0
```
- چک نمودن TLS Handshake
برای این کار ابتدا باید وارد پوشه برنامه بشید و Command Prompt از داخل آن پوشه را باز نمایید. یعنی در پوشه `شیفت+راستکلیک` را بزنید و گزینه `Open in Windows Terminal` را بزنید.
در محیط ترمینال کامند زیر را اجرا کنید.
`.\v2ray.exe tls ping sub.yourdomain.com`
به جای `sub.yourdomain.com` سابدامین خودتون را بذارید. اگر پیغام `handshake succeeded` ظاهر شد؛ یعنی اسکنر آماده استفاده است در غیر اینصورت باید در تنظیمات سرتیفیکت در سایت کلادفلر به صورت موقت تغییراتی اعمال کنید.
ورژن TLS را روی TLS 1.0 بذارید و گزینه TLS 1.3 را غیر فعال کنید.

* نکته: یادتون نره بعد انجام تست این گزینهها را به حالت اول برگردونید.
- ساختارهای الگوی کانفیگ را برای تست آماده کنید.
اگر میخواهید کانفیگهای خودتون را تست کنید باید در فایل Json مربوط به کانکشن درون پوشه برنامه اعمال کنید. نیاز است در `inbound` این تغییر اعمال گردد.
```
{
"inbounds": [{
"port": "PORTPORT",
"listen": "127.0.0.1",
"tag": "socks-inbound",
"protocol": "socks",
"settings": {
...
```
و همینطور در `outbound` نیز این تغییر اعمال گردد.
```
{
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [{
"address": "IP.IP.IP.IP",
...
```
حالا برای راحتی کار، چند نمونه الگوی کانفیگ که iSegaro زحمت کشیده حاضر کرده؛ قرار داده میشه میتوانید مطابق با نیازتون یکی را انتخاب کنید.
* دقت کنید در این ساختار ها فقط در قسمت `outbounds` باید مشخصات کانفیگ شامل ۵ قسمت `Port , UUID, PATH , HOST , SNI` را تغییر بدهید که با عبارت `xxxxx` مشخص شده , پس هرجا که عبارت `xxxxx` وجود داره رو فقط بسته به کانفیگ خودتون تغییر بدید و در باقی کدها تغییری انجام ندهید.
- نمونه الگوی Vmess+WS+TLS :
```
{
"inbounds": [{
"port": "PORTPORT",
"listen": "127.0.0.1",
"tag": "socks-inbound",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false,
"ip": "127.0.0.1"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [{
"address": "IP.IP.IP.IP",
"port": xxxxx,
"users": [{"id": "xxxxx" }]
}]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"wsSettings": {
"headers": {
"Host": "xxxxx"
},
"path": "xxxxx"
},
"tlsSettings": {
"serverName": "xxxxx",
"allowInsecure": false,
"fingerprint": "chrome",
"alpn": [
"http/1.1"
]
}
}
}],
"other": {}
}
```
- نمونه الگوی Vless+GRPC+TLS :
```
{
"inbounds": [{
"port": "PORTPORT",
"listen": "127.0.0.1",
"tag": "socks-inbound",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false,
"ip": "127.0.0.1"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}],
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [{
"address": "IP.IP.IP.IP",
"port": xxxxx,
"users": [{"id": "xxxxx",
"encryption": "none"
}]
}]
},
"streamSettings": {
"network": "grpc",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "xxxxx",
"alpn": [
"http/1.1"
],
"fingerprint": "chrome"
},
"grpcSettings": {
"serviceName": "",
"multiMode": false
}
}
}],
"other": {}
}
```
- نمونه الگوی Trojan+WS+TLS :
```
{
"inbounds": [{
"port": "PORTPORT",
"listen": "127.0.0.1",
"tag": "socks-inbound",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false,
"ip": "127.0.0.1"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}],
"outbounds": [
{
"tag": "proxy",
"protocol": "trojan",
"settings": {
"servers": [
{
"address": "IP.IP.IP.IP",
"method": "chacha20",
"ota": false,
"password": "xxxxx",
"port": xxxxx,
"level": 1,
"flow": ""
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "xxxxx",
"alpn": [
"http/1.1"
],
"fingerprint": "chrome"
},
"wsSettings": {
"path": "xxxxx",
"headers": {
"Host": "xxxxx"
}
}
},
"mux": {
"enabled": false,
"concurrency": -1
}
}
],
"other": {}
}
```
- نمونه الگوی Vless+WS+TLS :
```
{
"inbounds": [{
"port": "PORTPORT",
"listen": "127.0.0.1",
"tag": "socks-inbound",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false,
"ip": "127.0.0.1"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}],
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [{
"address": "IP.IP.IP.IP",
"port": xxxxx,
"users": [{"id": "xxxxx",
"encryption": "none"
}]
}]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "xxxxx",
"alpn": [
"http/1.1"
],
"fingerprint": "chrome"
},
"wsSettings": {
"path": "xxxxx",
"headers": {
"Host": "xxxxx"
}
}
}
}
],
"other": {}
}
```
در نهایت شما کانفیگ خودتون را طبق نمونهها برای مرحله بعد حاضر کنید یا از کانفیگ دیفالت استفاده کنید.
حالا فرض کنیم پیشنیازها را انجام دادید؛ کافیه فایل کانفیگ نمونه برنامه یا فایل کانفیگ ساخته شده توسط خودتون را که به فرمت Json است؛ از منوی `Tools > Add custom v2ray config` در برنامه قرار بدید تا اسکن بر اساس اون انجام بشه در غیر اینصورت برنامه با کانفیگ دیفالت اسکن میکند.

۱. از مسبر `Tools > Add custom v2ray config` میتوانید فایل مورد نظر خود را مطابق با الگوی توضیح داده شده به نرمافزار بدید تا اسکن بر اساس اون انجام بشه.
۲. میتوانید نوع تست دانلود یا آپلود یا هردو را تعیین کنید.
۳. در این قسمت می توانید تعداد همزمانی آیپیها برای تست توسط اسکنر را مشخص کنید. پیشنهاد میگردد به صورت مرحلهای این عدد را بالا ببرید و بر اساس قدرت پردازش CPU سیستم خود آن را کم یا زیاد کنید. مثدار دیفالت آن ۴ میباشد.
۴. سریعترین آیپی بعد از اتمام اسکن نمایش داده میشه
۵. رنج آیپیهای تست شده نمایش داده میشه
۶. از این قسمت میتونید رنج آیپیهای مورد نظر خود را به نرمافزار بدید که اسکن بر اساس آن انجام بشه.
* **پیشنهاد:** میتونید نرمافزار را تنظیم کنید که یکبار کل رنج آیپی دیفالت را اسکن کنه. برای دفعالت بعد میتونید این خروجی را فقط اسکن کنید (با دقت بالاتر) احتمالا نتیجه بهتری خواهید گرفت. همچنین اگر تست آپلود بگیرید احتمالا نتیجه بهتری خواهید گرفت. همه اینها به تلاش و خلاقیت خودتون بستگی داره.