Skip to content

Commit

Permalink
Update 检测程序介绍.md
Browse files Browse the repository at this point in the history
  • Loading branch information
free-ss authored Apr 4, 2019
1 parent b4d85c3 commit 9d358e9
Showing 1 changed file with 32 additions and 5 deletions.
37 changes: 32 additions & 5 deletions 检测程序介绍.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 检测程序介绍
------
## 高效TCP端口检测程序
### 核心Python2程序
### 核心Python函数
```
import socket
socket.setdefaulttimeout(3)
Expand All @@ -13,15 +13,42 @@ def check_ip_port(host,port):
else:
inet = socket.AF_INET
sock = socket.socket(inet)
status = sock.connect_ex((ip,port))
status = sock.connect_ex((ip,int(port)))
sock.close()
return status == 0
```
### 多线程并发
函数返回True,表示端口是能连接的;函数返回False,表示端口是不能连接的。
### 多个IP多线程并发检测
```
未完成
import threading
import MySQLdb
status_data = []
lock = threading.Lock()
threads = []
def check(ip,port):
status = check_ip_port(host,port)
with lock:
status_data.append([ip,port,status])
con = MySQLdb.connect(host=host,user=user,passwd=passwd,db=db)
cur = con.cursor()
cur.execute('''SELECT ip,port FROM ss''')
for ip,port in cur.fetchall():
thread = threading.Thread(target=check, args=(ip,port))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
cur.close()
con.close()
```
### 系统优化
为了多线程稳定运行,需要增加文件描述符的最大数量。具体优化方法请参考 https://shadowsocks.org/en/config/advanced.html

### 多节点多时间统计
以上检测方法并不能保证100%的准确,主要原因是:
由于国际网络线路的波动,可能会导致传输中的数据包丢失,即本来能连通的端口在网络波动的瞬间表现为不能连通。另外本站还观测到GFW有漏包的现象(持续时间非常短),即本来被封的端口在漏包的瞬间表现为能够连接。因此我们需要进行多节点和多时间上的统计来排除掉这些干扰。具体实现也很简单,只要在国内国外各部署几个检测点定期检测,通则记1分,不通没有分,通过打分就能100%准确检测出有没有被墙,甚至连被墙的准确时间都能检测出来。

## 高效Shadowsocks检测程序
```
Expand Down

0 comments on commit 9d358e9

Please sign in to comment.