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 {
|
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):
|
case <-time.After(time.Second * 3):
|
||||||
glog.V(LWARNING).Infof("[ssu] %s -> %s : %s", addr, dgram.Header.Addr.String(), "send queue is full, discard")
|
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
|
// start recv queue
|
||||||
go func(ch <-chan *packet) {
|
go func(ch <-chan *packet) {
|
||||||
for pkt := range ch {
|
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)
|
dstAddr, err := net.ResolveUDPAddr("udp", pkt.dstAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||||
continue
|
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)
|
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||||
return
|
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"
|
"revisionTime": "2017-01-19T05:34:58Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "idpL1fpHpfntk74IVfWtkP1PMZs=",
|
"checksumSHA1": "2kMuCJwcxppxWtk9dX1WtWZMGB4=",
|
||||||
"path": "github.com/ginuerzh/gost",
|
"path": "github.com/ginuerzh/gost",
|
||||||
"revision": "321b03712af504981d35a47c50c2cfe4dd788a9d",
|
"revision": "8861ffba01779f3a9f44b205b38d626fce71dff3",
|
||||||
"revisionTime": "2017-01-21T03:16:33Z"
|
"revisionTime": "2017-01-24T13:01:52Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "URsJa4y/sUUw/STmbeYx9EKqaYE=",
|
"checksumSHA1": "URsJa4y/sUUw/STmbeYx9EKqaYE=",
|
||||||
|
18
ss.go
18
ss.go
@ -283,7 +283,7 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
select {
|
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):
|
case <-time.After(time.Second * 3):
|
||||||
glog.V(LWARNING).Infof("[ssu] %s -> %s : %s", addr, dgram.Header.Addr.String(), "send queue is full, discard")
|
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
|
// start recv queue
|
||||||
go func(ch <-chan *packet) {
|
go func(ch <-chan *packet) {
|
||||||
for pkt := range ch {
|
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)
|
dstAddr, err := net.ResolveUDPAddr("udp", pkt.dstAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||||
continue
|
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)
|
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user