fix ss UDP packet format
This commit is contained in:
parent
8861ffba01
commit
10487dc3de
18
cmd/gost/vendor/github.com/ginuerzh/gost/ss.go
generated
vendored
18
cmd/gost/vendor/github.com/ginuerzh/gost/ss.go
generated
vendored
@ -283,7 +283,7 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
}
|
||||
|
||||
select {
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: b[:n+3]}:
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: dgram.Data}:
|
||||
case <-time.After(time.Second * 3):
|
||||
glog.V(LWARNING).Infof("[ssu] %s -> %s : %s", addr, dgram.Header.Addr.String(), "send queue is full, discard")
|
||||
}
|
||||
@ -292,12 +292,26 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
// start recv queue
|
||||
go func(ch <-chan *packet) {
|
||||
for pkt := range ch {
|
||||
srcAddr, err := net.ResolveUDPAddr("udp", pkt.srcAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
dstAddr, err := net.ResolveUDPAddr("udp", pkt.dstAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
if _, err := conn.WriteTo(pkt.data, dstAddr); err != nil {
|
||||
|
||||
dgram := gosocks5.NewUDPDatagram(gosocks5.NewUDPHeader(0, 0, ToSocksAddr(srcAddr)), pkt.data)
|
||||
b := bytes.Buffer{}
|
||||
dgram.Write(&b)
|
||||
if b.Len() < 10 {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : invalid udp datagram", pkt.dstAddr, pkt.srcAddr)
|
||||
continue
|
||||
}
|
||||
|
||||
if _, err := conn.WriteTo(b.Bytes()[3:], dstAddr); err != nil { // remove rsv and frag fields to make it standard shadowsocks UDP datagram
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
return
|
||||
}
|
||||
|
6
cmd/gost/vendor/vendor.json
vendored
6
cmd/gost/vendor/vendor.json
vendored
@ -21,10 +21,10 @@
|
||||
"revisionTime": "2017-01-19T05:34:58Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "idpL1fpHpfntk74IVfWtkP1PMZs=",
|
||||
"checksumSHA1": "2kMuCJwcxppxWtk9dX1WtWZMGB4=",
|
||||
"path": "github.com/ginuerzh/gost",
|
||||
"revision": "321b03712af504981d35a47c50c2cfe4dd788a9d",
|
||||
"revisionTime": "2017-01-21T03:16:33Z"
|
||||
"revision": "8861ffba01779f3a9f44b205b38d626fce71dff3",
|
||||
"revisionTime": "2017-01-24T13:01:52Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "URsJa4y/sUUw/STmbeYx9EKqaYE=",
|
||||
|
18
ss.go
18
ss.go
@ -283,7 +283,7 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
}
|
||||
|
||||
select {
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: b[:n+3]}:
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: dgram.Data}:
|
||||
case <-time.After(time.Second * 3):
|
||||
glog.V(LWARNING).Infof("[ssu] %s -> %s : %s", addr, dgram.Header.Addr.String(), "send queue is full, discard")
|
||||
}
|
||||
@ -292,12 +292,26 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
// start recv queue
|
||||
go func(ch <-chan *packet) {
|
||||
for pkt := range ch {
|
||||
srcAddr, err := net.ResolveUDPAddr("udp", pkt.srcAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
dstAddr, err := net.ResolveUDPAddr("udp", pkt.dstAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
if _, err := conn.WriteTo(pkt.data, dstAddr); err != nil {
|
||||
|
||||
dgram := gosocks5.NewUDPDatagram(gosocks5.NewUDPHeader(0, 0, ToSocksAddr(srcAddr)), pkt.data)
|
||||
b := bytes.Buffer{}
|
||||
dgram.Write(&b)
|
||||
if b.Len() < 10 {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : invalid udp datagram", pkt.dstAddr, pkt.srcAddr)
|
||||
continue
|
||||
}
|
||||
|
||||
if _, err := conn.WriteTo(b.Bytes()[3:], dstAddr); err != nil { // remove rsv and frag fields to make it standard shadowsocks UDP datagram
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user