```Golang
package main
import(
"fmt"
"io"
"net"
"sync"
)
varlocksync.Mutex
vartrueList[]string
varipstring
varliststring
funcmain(){
ip="0.0.0.0:888"
server()
}
funcserver(){
fmt.Printf("Listening%s",ip)
lis,err:=net.Listen("tcp",ip)
iferr!=nil{
fmt.Println(err)
return
}
deferlis.Close()
for{
conn,err:=lis.Accept()
iferr!=nil{
fmt.Println("建立连接错误:%v\n",err)
continue
}
fmt.Println(conn.RemoteAddr(),conn.LocalAddr())
gohandle(conn)
}
}
funchandle(sconnnet.Conn){
defersconn.Close()
ip:="127.0.0.1:8888"
dconn,err:=net.Dial("tcp",ip)
iferr!=nil{
fmt.Printf("连接%v失败:%v\n",ip,err)
return
}
ExitChan:=make(chanbool,1)
gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){
io.Copy(dconn,sconn)
ExitChan<-true
}(sconn,dconn,ExitChan)
gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){
io.Copy(sconn,dconn)
ExitChan<-true
}(sconn,dconn,ExitChan)
<-ExitChan
dconn.Close()
}
SS+Proxifier
让应用程序通过Proxifier走SS线路
SS+SocksCap64
与1用处一样。但SocksCap64支持UDP。
实用路由器,有的可以刷固件,刷一个支持SS账户的然后登陆,设置就可以了。
Udp接收到应用协议的某个消息(已编码为二进制)后,不会分包,但是要记录当前数据包的大小(消息大小加上8个字节头部),然后交给IP层。而TCP接收到应用层协议的消息(已编码为二进制)后,然后参考该计算机连接的网络数据链路层MTU(最大传输单元)确定是否要分包,然后交给IP层。UDP是非面向连接的,即发送数据之前不需要建立连接,而TCP则是面向连接的,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。也就是说UDP管发不管到,而TCP管发管到。因此,在安全性方面来说,TCP更具有优越性。Udp适用场合:如果需要做实时性很高且消息小(比如小于以太网的MTU1500Byte)的通信程序,UDP就很适合。关键消息重复发,不用等确认都可以,当然最终还是需要确认。如果是内网环境,网络非常稳定,UDP几乎不会出问题,如果极度要求性能,可以考虑。如果你公网网络资源有限,而用户之间需要传递大量数据,可以考虑用UDP做NAT穿透