Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
G
gost
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
gost
Commits
d9886087
Commit
d9886087
authored
Mar 03, 2017
by
rui.zheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#84 add KCP snmp logger
parent
82925e4a
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
130 additions
and
16 deletions
+130
-16
chain.go
chain.go
+3
-0
cmd/gost/kcp.json
cmd/gost/kcp.json
+3
-1
cmd/gost/vendor/github.com/ginuerzh/gost/chain.go
cmd/gost/vendor/github.com/ginuerzh/gost/chain.go
+3
-0
cmd/gost/vendor/github.com/ginuerzh/gost/kcp.go
cmd/gost/vendor/github.com/ginuerzh/gost/kcp.go
+59
-6
cmd/gost/vendor/vendor.json
cmd/gost/vendor/vendor.json
+3
-3
kcp.go
kcp.go
+59
-6
No files found.
chain.go
View file @
d9886087
...
@@ -120,6 +120,9 @@ func (c *ProxyChain) Init() {
...
@@ -120,6 +120,9 @@ func (c *ProxyChain) Init() {
config
.
Key
,
_
=
c
.
nodes
[
0
]
.
Users
[
0
]
.
Password
()
config
.
Key
,
_
=
c
.
nodes
[
0
]
.
Users
[
0
]
.
Password
()
}
}
c
.
kcpConfig
=
config
c
.
kcpConfig
=
config
go
snmpLogger
(
config
.
SnmpLog
,
config
.
SnmpPeriod
)
go
kcpSigHandler
()
return
return
}
}
...
...
cmd/gost/kcp.json
View file @
d9886087
...
@@ -15,5 +15,7 @@
...
@@ -15,5 +15,7 @@
"resend"
:
0
,
"resend"
:
0
,
"nc"
:
0
,
"nc"
:
0
,
"sockbuf"
:
4194304
,
"sockbuf"
:
4194304
,
"keepalive"
:
10
"keepalive"
:
10
,
"snmplog"
:
""
,
"snmpperiod"
:
60
}
}
\ No newline at end of file
cmd/gost/vendor/github.com/ginuerzh/gost/chain.go
View file @
d9886087
...
@@ -120,6 +120,9 @@ func (c *ProxyChain) Init() {
...
@@ -120,6 +120,9 @@ func (c *ProxyChain) Init() {
config
.
Key
,
_
=
c
.
nodes
[
0
]
.
Users
[
0
]
.
Password
()
config
.
Key
,
_
=
c
.
nodes
[
0
]
.
Users
[
0
]
.
Password
()
}
}
c
.
kcpConfig
=
config
c
.
kcpConfig
=
config
go
snmpLogger
(
config
.
SnmpLog
,
config
.
SnmpPeriod
)
go
kcpSigHandler
()
return
return
}
}
...
...
cmd/gost/vendor/github.com/ginuerzh/gost/kcp.go
View file @
d9886087
...
@@ -4,7 +4,9 @@ package gost
...
@@ -4,7 +4,9 @@ package gost
import
(
import
(
"crypto/sha1"
"crypto/sha1"
"encoding/csv"
"encoding/json"
"encoding/json"
"fmt"
"github.com/golang/glog"
"github.com/golang/glog"
"github.com/klauspost/compress/snappy"
"github.com/klauspost/compress/snappy"
"golang.org/x/crypto/pbkdf2"
"golang.org/x/crypto/pbkdf2"
...
@@ -12,6 +14,8 @@ import (
...
@@ -12,6 +14,8 @@ import (
"gopkg.in/xtaci/smux.v1"
"gopkg.in/xtaci/smux.v1"
"net"
"net"
"os"
"os"
"os/signal"
"syscall"
"time"
"time"
)
)
...
@@ -41,6 +45,8 @@ type KCPConfig struct {
...
@@ -41,6 +45,8 @@ type KCPConfig struct {
NoCongestion
int
`json:"nc"`
NoCongestion
int
`json:"nc"`
SockBuf
int
`json:"sockbuf"`
SockBuf
int
`json:"sockbuf"`
KeepAlive
int
`json:"keepalive"`
KeepAlive
int
`json:"keepalive"`
SnmpLog
string
`json:"snmplog"`
SnmpPeriod
int
`json:"snmpperiod"`
}
}
func
ParseKCPConfig
(
configFile
string
)
(
*
KCPConfig
,
error
)
{
func
ParseKCPConfig
(
configFile
string
)
(
*
KCPConfig
,
error
)
{
...
@@ -63,15 +69,15 @@ func ParseKCPConfig(configFile string) (*KCPConfig, error) {
...
@@ -63,15 +69,15 @@ func ParseKCPConfig(configFile string) (*KCPConfig, error) {
func
(
c
*
KCPConfig
)
Init
()
{
func
(
c
*
KCPConfig
)
Init
()
{
switch
c
.
Mode
{
switch
c
.
Mode
{
case
"normal"
:
case
"normal"
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
3
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
5
0
,
2
,
1
case
"fast2"
:
case
"fast2"
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
2
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
3
0
,
2
,
1
case
"fast3"
:
case
"fast3"
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
1
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
2
0
,
2
,
1
case
"fast"
:
case
"fast"
:
fallthrough
fallthrough
default
:
default
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
2
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
4
0
,
2
,
1
}
}
}
}
...
@@ -89,11 +95,13 @@ var (
...
@@ -89,11 +95,13 @@ var (
NoComp
:
false
,
NoComp
:
false
,
AckNodelay
:
false
,
AckNodelay
:
false
,
NoDelay
:
0
,
NoDelay
:
0
,
Interval
:
4
0
,
Interval
:
5
0
,
Resend
:
0
,
Resend
:
0
,
NoCongestion
:
0
,
NoCongestion
:
0
,
SockBuf
:
4194304
,
SockBuf
:
4194304
,
KeepAlive
:
10
,
KeepAlive
:
10
,
SnmpLog
:
""
,
SnmpPeriod
:
60
,
}
}
)
)
...
@@ -127,10 +135,12 @@ func (s *KCPServer) ListenAndServe() (err error) {
...
@@ -127,10 +135,12 @@ func (s *KCPServer) ListenAndServe() (err error) {
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
}
}
go
snmpLogger
(
s
.
Config
.
SnmpLog
,
s
.
Config
.
SnmpPeriod
)
go
kcpSigHandler
()
for
{
for
{
conn
,
err
:=
ln
.
AcceptKCP
()
conn
,
err
:=
ln
.
AcceptKCP
()
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
err
)
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
continue
continue
}
}
...
@@ -209,6 +219,49 @@ func blockCrypt(key, crypt, salt string) (block kcp.BlockCrypt) {
...
@@ -209,6 +219,49 @@ func blockCrypt(key, crypt, salt string) (block kcp.BlockCrypt) {
return
return
}
}
func
snmpLogger
(
path
string
,
interval
int
)
{
if
path
==
""
||
interval
==
0
{
return
}
ticker
:=
time
.
NewTicker
(
time
.
Duration
(
interval
)
*
time
.
Second
)
defer
ticker
.
Stop
()
for
{
select
{
case
<-
ticker
.
C
:
f
,
err
:=
os
.
OpenFile
(
time
.
Now
()
.
Format
(
path
),
os
.
O_RDWR
|
os
.
O_CREATE
|
os
.
O_APPEND
,
0666
)
if
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
return
}
w
:=
csv
.
NewWriter
(
f
)
// write header in empty file
if
stat
,
err
:=
f
.
Stat
();
err
==
nil
&&
stat
.
Size
()
==
0
{
if
err
:=
w
.
Write
(
append
([]
string
{
"Unix"
},
kcp
.
DefaultSnmp
.
Header
()
...
));
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
}
}
if
err
:=
w
.
Write
(
append
([]
string
{
fmt
.
Sprint
(
time
.
Now
()
.
Unix
())},
kcp
.
DefaultSnmp
.
ToSlice
()
...
));
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
}
kcp
.
DefaultSnmp
.
Reset
()
w
.
Flush
()
f
.
Close
()
}
}
}
func
kcpSigHandler
()
{
ch
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
ch
,
syscall
.
SIGUSR1
)
for
{
switch
<-
ch
{
case
syscall
.
SIGUSR1
:
glog
.
V
(
LINFO
)
.
Infof
(
"[kcp] SNMP: %+v"
,
kcp
.
DefaultSnmp
.
Copy
())
}
}
}
type
KCPSession
struct
{
type
KCPSession
struct
{
conn
net
.
Conn
conn
net
.
Conn
session
*
smux
.
Session
session
*
smux
.
Session
...
...
cmd/gost/vendor/vendor.json
View file @
d9886087
...
@@ -21,10 +21,10 @@
...
@@ -21,10 +21,10 @@
"revisionTime"
:
"2017-01-19T05:34:58Z"
"revisionTime"
:
"2017-01-19T05:34:58Z"
},
},
{
{
"checksumSHA1"
:
"
iO+jPih44pGmJmhxHniw6feeIUA
="
,
"checksumSHA1"
:
"
qaLXKRQRMKw/NZ3fVYln3PahmGU
="
,
"path"
:
"github.com/ginuerzh/gost"
,
"path"
:
"github.com/ginuerzh/gost"
,
"revision"
:
"
d5e4e24e8354da5cef62733a4aa8a9d92556945e
"
,
"revision"
:
"
82925e4ac7c81687fb985c8cdbf0f072b01c3bc6
"
,
"revisionTime"
:
"2017-0
2-26T10:31:07
Z"
"revisionTime"
:
"2017-0
3-03T04:48:46
Z"
},
},
{
{
"checksumSHA1"
:
"+XIOnTW0rv8Kr/amkXgMraNeUr4="
,
"checksumSHA1"
:
"+XIOnTW0rv8Kr/amkXgMraNeUr4="
,
...
...
kcp.go
View file @
d9886087
...
@@ -4,7 +4,9 @@ package gost
...
@@ -4,7 +4,9 @@ package gost
import
(
import
(
"crypto/sha1"
"crypto/sha1"
"encoding/csv"
"encoding/json"
"encoding/json"
"fmt"
"github.com/golang/glog"
"github.com/golang/glog"
"github.com/klauspost/compress/snappy"
"github.com/klauspost/compress/snappy"
"golang.org/x/crypto/pbkdf2"
"golang.org/x/crypto/pbkdf2"
...
@@ -12,6 +14,8 @@ import (
...
@@ -12,6 +14,8 @@ import (
"gopkg.in/xtaci/smux.v1"
"gopkg.in/xtaci/smux.v1"
"net"
"net"
"os"
"os"
"os/signal"
"syscall"
"time"
"time"
)
)
...
@@ -41,6 +45,8 @@ type KCPConfig struct {
...
@@ -41,6 +45,8 @@ type KCPConfig struct {
NoCongestion
int
`json:"nc"`
NoCongestion
int
`json:"nc"`
SockBuf
int
`json:"sockbuf"`
SockBuf
int
`json:"sockbuf"`
KeepAlive
int
`json:"keepalive"`
KeepAlive
int
`json:"keepalive"`
SnmpLog
string
`json:"snmplog"`
SnmpPeriod
int
`json:"snmpperiod"`
}
}
func
ParseKCPConfig
(
configFile
string
)
(
*
KCPConfig
,
error
)
{
func
ParseKCPConfig
(
configFile
string
)
(
*
KCPConfig
,
error
)
{
...
@@ -63,15 +69,15 @@ func ParseKCPConfig(configFile string) (*KCPConfig, error) {
...
@@ -63,15 +69,15 @@ func ParseKCPConfig(configFile string) (*KCPConfig, error) {
func
(
c
*
KCPConfig
)
Init
()
{
func
(
c
*
KCPConfig
)
Init
()
{
switch
c
.
Mode
{
switch
c
.
Mode
{
case
"normal"
:
case
"normal"
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
3
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
5
0
,
2
,
1
case
"fast2"
:
case
"fast2"
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
2
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
3
0
,
2
,
1
case
"fast3"
:
case
"fast3"
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
1
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
1
,
2
0
,
2
,
1
case
"fast"
:
case
"fast"
:
fallthrough
fallthrough
default
:
default
:
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
2
0
,
2
,
1
c
.
NoDelay
,
c
.
Interval
,
c
.
Resend
,
c
.
NoCongestion
=
0
,
4
0
,
2
,
1
}
}
}
}
...
@@ -89,11 +95,13 @@ var (
...
@@ -89,11 +95,13 @@ var (
NoComp
:
false
,
NoComp
:
false
,
AckNodelay
:
false
,
AckNodelay
:
false
,
NoDelay
:
0
,
NoDelay
:
0
,
Interval
:
4
0
,
Interval
:
5
0
,
Resend
:
0
,
Resend
:
0
,
NoCongestion
:
0
,
NoCongestion
:
0
,
SockBuf
:
4194304
,
SockBuf
:
4194304
,
KeepAlive
:
10
,
KeepAlive
:
10
,
SnmpLog
:
""
,
SnmpPeriod
:
60
,
}
}
)
)
...
@@ -127,10 +135,12 @@ func (s *KCPServer) ListenAndServe() (err error) {
...
@@ -127,10 +135,12 @@ func (s *KCPServer) ListenAndServe() (err error) {
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
}
}
go
snmpLogger
(
s
.
Config
.
SnmpLog
,
s
.
Config
.
SnmpPeriod
)
go
kcpSigHandler
()
for
{
for
{
conn
,
err
:=
ln
.
AcceptKCP
()
conn
,
err
:=
ln
.
AcceptKCP
()
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
err
)
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
continue
continue
}
}
...
@@ -209,6 +219,49 @@ func blockCrypt(key, crypt, salt string) (block kcp.BlockCrypt) {
...
@@ -209,6 +219,49 @@ func blockCrypt(key, crypt, salt string) (block kcp.BlockCrypt) {
return
return
}
}
func
snmpLogger
(
path
string
,
interval
int
)
{
if
path
==
""
||
interval
==
0
{
return
}
ticker
:=
time
.
NewTicker
(
time
.
Duration
(
interval
)
*
time
.
Second
)
defer
ticker
.
Stop
()
for
{
select
{
case
<-
ticker
.
C
:
f
,
err
:=
os
.
OpenFile
(
time
.
Now
()
.
Format
(
path
),
os
.
O_RDWR
|
os
.
O_CREATE
|
os
.
O_APPEND
,
0666
)
if
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
return
}
w
:=
csv
.
NewWriter
(
f
)
// write header in empty file
if
stat
,
err
:=
f
.
Stat
();
err
==
nil
&&
stat
.
Size
()
==
0
{
if
err
:=
w
.
Write
(
append
([]
string
{
"Unix"
},
kcp
.
DefaultSnmp
.
Header
()
...
));
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
}
}
if
err
:=
w
.
Write
(
append
([]
string
{
fmt
.
Sprint
(
time
.
Now
()
.
Unix
())},
kcp
.
DefaultSnmp
.
ToSlice
()
...
));
err
!=
nil
{
glog
.
V
(
LWARNING
)
.
Infoln
(
"[kcp]"
,
err
)
}
kcp
.
DefaultSnmp
.
Reset
()
w
.
Flush
()
f
.
Close
()
}
}
}
func
kcpSigHandler
()
{
ch
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
ch
,
syscall
.
SIGUSR1
)
for
{
switch
<-
ch
{
case
syscall
.
SIGUSR1
:
glog
.
V
(
LINFO
)
.
Infof
(
"[kcp] SNMP: %+v"
,
kcp
.
DefaultSnmp
.
Copy
())
}
}
}
type
KCPSession
struct
{
type
KCPSession
struct
{
conn
net
.
Conn
conn
net
.
Conn
session
*
smux
.
Session
session
*
smux
.
Session
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment