added crawler
This commit is contained in:
parent
4b2ea88929
commit
7ec9a326fd
79
crawler/crawler.go
Normal file
79
crawler/crawler.go
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
package crawler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Internal interface {
|
||||||
|
Internal(params config.Config) ([]byte, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Crawler interface {
|
||||||
|
Init(path []byte) ([]byte, error)
|
||||||
|
Add(data []byte) ([]byte, error)
|
||||||
|
Remove(id string) ([]byte, error)
|
||||||
|
Get(id string) ([]byte, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type CrawlerImpl struct {
|
||||||
|
Crawler
|
||||||
|
configs map[string]config.Config
|
||||||
|
internal Internal
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CrawlerImpl) Init(data []byte) ([]byte, error) {
|
||||||
|
if c.configs == nil {
|
||||||
|
c.configs = make(map[string]config.Config, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.Add(data)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// load all file in path
|
||||||
|
return json.Marshal(true)
|
||||||
|
}
|
||||||
|
func (c *CrawlerImpl) Add(data []byte) ([]byte, error) {
|
||||||
|
|
||||||
|
var m = config.Config{}
|
||||||
|
json.Unmarshal(data, &m)
|
||||||
|
c.configs[m.Id] = m
|
||||||
|
|
||||||
|
return json.Marshal(true)
|
||||||
|
}
|
||||||
|
func (c *CrawlerImpl) Remove(id string) ([]byte, error) {
|
||||||
|
//remove in config
|
||||||
|
delete(c.configs, id)
|
||||||
|
return json.Marshal(true)
|
||||||
|
}
|
||||||
|
func (c *CrawlerImpl) Get(id string) ([]byte, error) {
|
||||||
|
if c.internal != nil {
|
||||||
|
out, err := c.internal.Internal(c.GetConfig(id))
|
||||||
|
if err != nil {
|
||||||
|
//set error fail, message
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
return nil, errors.New("Not Assigned")
|
||||||
|
}
|
||||||
|
|
||||||
|
// internal methods
|
||||||
|
func (c *CrawlerImpl) GetConfig(id string) config.Config {
|
||||||
|
return c.configs[id]
|
||||||
|
}
|
||||||
|
func (c *CrawlerImpl) SetInternal(i Internal) {
|
||||||
|
c.internal = i
|
||||||
|
}
|
||||||
|
func (c *CrawlerImpl) PutConfig(name string, m config.Config) {
|
||||||
|
if c.configs == nil {
|
||||||
|
c.configs = make(map[string]config.Config, 0)
|
||||||
|
}
|
||||||
|
c.configs[name] = m
|
||||||
|
}
|
47
crawler/crawler_generalization_test.go
Normal file
47
crawler/crawler_generalization_test.go
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package crawler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Super interface {
|
||||||
|
Method()
|
||||||
|
}
|
||||||
|
|
||||||
|
type sss struct{}
|
||||||
|
|
||||||
|
func (s *sss) Method() {
|
||||||
|
fmt.Println("Super")
|
||||||
|
}
|
||||||
|
|
||||||
|
type Child struct {
|
||||||
|
sss
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Child) Method() {
|
||||||
|
c.sss.Method()
|
||||||
|
fmt.Println("Child")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGene(t *testing.T) {
|
||||||
|
c := Child{}
|
||||||
|
c.Method()
|
||||||
|
|
||||||
|
var s Super = &Child{}
|
||||||
|
s.Method()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExistInterface(t *testing.T) {
|
||||||
|
|
||||||
|
m := make(map[string]Super, 0)
|
||||||
|
m["test"] = &Child{}
|
||||||
|
|
||||||
|
_, ok := m["test1"]
|
||||||
|
if ok {
|
||||||
|
fmt.Println(ok)
|
||||||
|
} else {
|
||||||
|
fmt.Println(ok)
|
||||||
|
}
|
||||||
|
}
|
19
crawler/crawler_map_convert_test.go
Normal file
19
crawler/crawler_map_convert_test.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package crawler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestInterfaceValueToTypeCast(t *testing.T) {
|
||||||
|
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
|
||||||
|
m["a"] = "1"
|
||||||
|
m["b"] = 2
|
||||||
|
m["c"] = false
|
||||||
|
|
||||||
|
fmt.Println(m["a"].(string))
|
||||||
|
fmt.Println(m["b"].(int))
|
||||||
|
fmt.Println(m["c"].(bool))
|
||||||
|
}
|
1
crawler/grpc/cmd.txt
Normal file
1
crawler/grpc/cmd.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
protoc -I grpc/ grpc/grpc.proto --go_out=plugins=grpc:grpc
|
612
crawler/grpc/grpc.pb.go
Normal file
612
crawler/grpc/grpc.pb.go
Normal file
@ -0,0 +1,612 @@
|
|||||||
|
// Code generated by protoc-gen-go.
|
||||||
|
// source: grpc.proto
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
|
/*
|
||||||
|
Package grpc is a generated protocol buffer package.
|
||||||
|
|
||||||
|
It is generated from these files:
|
||||||
|
grpc.proto
|
||||||
|
|
||||||
|
It has these top-level messages:
|
||||||
|
Empty
|
||||||
|
Boolean
|
||||||
|
InputArray
|
||||||
|
Init
|
||||||
|
Input
|
||||||
|
InputAdd
|
||||||
|
Output
|
||||||
|
*/
|
||||||
|
package grpc
|
||||||
|
|
||||||
|
import proto "github.com/golang/protobuf/proto"
|
||||||
|
import fmt "fmt"
|
||||||
|
import math "math"
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "golang.org/x/net/context"
|
||||||
|
grpc1 "google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ = proto.Marshal
|
||||||
|
var _ = fmt.Errorf
|
||||||
|
var _ = math.Inf
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the proto package it is being compiled against.
|
||||||
|
// A compilation error at this line likely means your copy of the
|
||||||
|
// proto package needs to be updated.
|
||||||
|
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
||||||
|
|
||||||
|
type Crawlers int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
Crawlers_HEALTH_ACTIVEDIRECTORY Crawlers = 0
|
||||||
|
Crawlers_HEALTH_DNS Crawlers = 1
|
||||||
|
Crawlers_HEALTH_FTP Crawlers = 2
|
||||||
|
Crawlers_HEALTH_FTPS Crawlers = 3
|
||||||
|
Crawlers_HEALTH_IMAP Crawlers = 4
|
||||||
|
Crawlers_HEALTH_LDAP Crawlers = 5
|
||||||
|
Crawlers_HEALTH_MONGODB Crawlers = 6
|
||||||
|
Crawlers_HEALTH_MSSQL Crawlers = 7
|
||||||
|
Crawlers_HEALTH_MYSQL Crawlers = 8
|
||||||
|
Crawlers_HEALTH_MARIADB Crawlers = 9
|
||||||
|
Crawlers_HEALTH_PGSQL Crawlers = 10
|
||||||
|
Crawlers_HEALTH_NETBIOS Crawlers = 11
|
||||||
|
Crawlers_HEALTH_ORACLE Crawlers = 12
|
||||||
|
Crawlers_HEALTH_POP3 Crawlers = 13
|
||||||
|
Crawlers_HEALTH_REDIS Crawlers = 14
|
||||||
|
Crawlers_HEALTH_RMI Crawlers = 15
|
||||||
|
Crawlers_HEALTH_SMB Crawlers = 16
|
||||||
|
Crawlers_HEALTH_SMTP Crawlers = 17
|
||||||
|
Crawlers_HEALTH_SNMPV2C Crawlers = 18
|
||||||
|
Crawlers_HEALTH_SNMPV3 Crawlers = 19
|
||||||
|
Crawlers_HEALTH_SSH Crawlers = 20
|
||||||
|
Crawlers_HEALTH_TELNET Crawlers = 21
|
||||||
|
Crawlers_HEALTH_WMI Crawlers = 22
|
||||||
|
Crawlers_HEALTH_CASSANDRA Crawlers = 23
|
||||||
|
Crawlers_HEALTH_HTTP Crawlers = 24
|
||||||
|
Crawlers_SQL Crawlers = 25
|
||||||
|
Crawlers_SNMP Crawlers = 26
|
||||||
|
Crawlers_WMI Crawlers = 27
|
||||||
|
Crawlers_JMX Crawlers = 28
|
||||||
|
Crawlers_REDIS Crawlers = 29
|
||||||
|
Crawlers_MONGODB Crawlers = 30
|
||||||
|
)
|
||||||
|
|
||||||
|
var Crawlers_name = map[int32]string{
|
||||||
|
0: "HEALTH_ACTIVEDIRECTORY",
|
||||||
|
1: "HEALTH_DNS",
|
||||||
|
2: "HEALTH_FTP",
|
||||||
|
3: "HEALTH_FTPS",
|
||||||
|
4: "HEALTH_IMAP",
|
||||||
|
5: "HEALTH_LDAP",
|
||||||
|
6: "HEALTH_MONGODB",
|
||||||
|
7: "HEALTH_MSSQL",
|
||||||
|
8: "HEALTH_MYSQL",
|
||||||
|
9: "HEALTH_MARIADB",
|
||||||
|
10: "HEALTH_PGSQL",
|
||||||
|
11: "HEALTH_NETBIOS",
|
||||||
|
12: "HEALTH_ORACLE",
|
||||||
|
13: "HEALTH_POP3",
|
||||||
|
14: "HEALTH_REDIS",
|
||||||
|
15: "HEALTH_RMI",
|
||||||
|
16: "HEALTH_SMB",
|
||||||
|
17: "HEALTH_SMTP",
|
||||||
|
18: "HEALTH_SNMPV2C",
|
||||||
|
19: "HEALTH_SNMPV3",
|
||||||
|
20: "HEALTH_SSH",
|
||||||
|
21: "HEALTH_TELNET",
|
||||||
|
22: "HEALTH_WMI",
|
||||||
|
23: "HEALTH_CASSANDRA",
|
||||||
|
24: "HEALTH_HTTP",
|
||||||
|
25: "SQL",
|
||||||
|
26: "SNMP",
|
||||||
|
27: "WMI",
|
||||||
|
28: "JMX",
|
||||||
|
29: "REDIS",
|
||||||
|
30: "MONGODB",
|
||||||
|
}
|
||||||
|
var Crawlers_value = map[string]int32{
|
||||||
|
"HEALTH_ACTIVEDIRECTORY": 0,
|
||||||
|
"HEALTH_DNS": 1,
|
||||||
|
"HEALTH_FTP": 2,
|
||||||
|
"HEALTH_FTPS": 3,
|
||||||
|
"HEALTH_IMAP": 4,
|
||||||
|
"HEALTH_LDAP": 5,
|
||||||
|
"HEALTH_MONGODB": 6,
|
||||||
|
"HEALTH_MSSQL": 7,
|
||||||
|
"HEALTH_MYSQL": 8,
|
||||||
|
"HEALTH_MARIADB": 9,
|
||||||
|
"HEALTH_PGSQL": 10,
|
||||||
|
"HEALTH_NETBIOS": 11,
|
||||||
|
"HEALTH_ORACLE": 12,
|
||||||
|
"HEALTH_POP3": 13,
|
||||||
|
"HEALTH_REDIS": 14,
|
||||||
|
"HEALTH_RMI": 15,
|
||||||
|
"HEALTH_SMB": 16,
|
||||||
|
"HEALTH_SMTP": 17,
|
||||||
|
"HEALTH_SNMPV2C": 18,
|
||||||
|
"HEALTH_SNMPV3": 19,
|
||||||
|
"HEALTH_SSH": 20,
|
||||||
|
"HEALTH_TELNET": 21,
|
||||||
|
"HEALTH_WMI": 22,
|
||||||
|
"HEALTH_CASSANDRA": 23,
|
||||||
|
"HEALTH_HTTP": 24,
|
||||||
|
"SQL": 25,
|
||||||
|
"SNMP": 26,
|
||||||
|
"WMI": 27,
|
||||||
|
"JMX": 28,
|
||||||
|
"REDIS": 29,
|
||||||
|
"MONGODB": 30,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x Crawlers) String() string {
|
||||||
|
return proto.EnumName(Crawlers_name, int32(x))
|
||||||
|
}
|
||||||
|
func (Crawlers) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
||||||
|
|
||||||
|
type Empty struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Empty) Reset() { *m = Empty{} }
|
||||||
|
func (m *Empty) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Empty) ProtoMessage() {}
|
||||||
|
func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
||||||
|
|
||||||
|
type Boolean struct {
|
||||||
|
Check bool `protobuf:"varint,1,opt,name=check" json:"check,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Boolean) Reset() { *m = Boolean{} }
|
||||||
|
func (m *Boolean) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Boolean) ProtoMessage() {}
|
||||||
|
func (*Boolean) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
|
||||||
|
|
||||||
|
func (m *Boolean) GetCheck() bool {
|
||||||
|
if m != nil {
|
||||||
|
return m.Check
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
type InputArray struct {
|
||||||
|
In []*Init `protobuf:"bytes,1,rep,name=in" json:"in,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *InputArray) Reset() { *m = InputArray{} }
|
||||||
|
func (m *InputArray) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*InputArray) ProtoMessage() {}
|
||||||
|
func (*InputArray) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
|
||||||
|
|
||||||
|
func (m *InputArray) GetIn() []*Init {
|
||||||
|
if m != nil {
|
||||||
|
return m.In
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Init struct {
|
||||||
|
Name Crawlers `protobuf:"varint,1,opt,name=name,enum=Crawlers" json:"name,omitempty"`
|
||||||
|
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Init) Reset() { *m = Init{} }
|
||||||
|
func (m *Init) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Init) ProtoMessage() {}
|
||||||
|
func (*Init) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
|
||||||
|
|
||||||
|
func (m *Init) GetName() Crawlers {
|
||||||
|
if m != nil {
|
||||||
|
return m.Name
|
||||||
|
}
|
||||||
|
return Crawlers_HEALTH_ACTIVEDIRECTORY
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Init) GetData() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Input struct {
|
||||||
|
Name Crawlers `protobuf:"varint,1,opt,name=name,enum=Crawlers" json:"name,omitempty"`
|
||||||
|
Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Input) Reset() { *m = Input{} }
|
||||||
|
func (m *Input) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Input) ProtoMessage() {}
|
||||||
|
func (*Input) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
|
||||||
|
|
||||||
|
func (m *Input) GetName() Crawlers {
|
||||||
|
if m != nil {
|
||||||
|
return m.Name
|
||||||
|
}
|
||||||
|
return Crawlers_HEALTH_ACTIVEDIRECTORY
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Input) GetId() string {
|
||||||
|
if m != nil {
|
||||||
|
return m.Id
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
type InputAdd struct {
|
||||||
|
Name Crawlers `protobuf:"varint,1,opt,name=name,enum=Crawlers" json:"name,omitempty"`
|
||||||
|
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *InputAdd) Reset() { *m = InputAdd{} }
|
||||||
|
func (m *InputAdd) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*InputAdd) ProtoMessage() {}
|
||||||
|
func (*InputAdd) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
|
||||||
|
|
||||||
|
func (m *InputAdd) GetName() Crawlers {
|
||||||
|
if m != nil {
|
||||||
|
return m.Name
|
||||||
|
}
|
||||||
|
return Crawlers_HEALTH_ACTIVEDIRECTORY
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *InputAdd) GetData() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// response models
|
||||||
|
type Output struct {
|
||||||
|
StartDate int64 `protobuf:"varint,1,opt,name=startDate" json:"startDate,omitempty"`
|
||||||
|
EndDate int64 `protobuf:"varint,2,opt,name=endDate" json:"endDate,omitempty"`
|
||||||
|
Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Output) Reset() { *m = Output{} }
|
||||||
|
func (m *Output) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Output) ProtoMessage() {}
|
||||||
|
func (*Output) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
|
||||||
|
|
||||||
|
func (m *Output) GetStartDate() int64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.StartDate
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Output) GetEndDate() int64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.EndDate
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Output) GetData() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
proto.RegisterType((*Empty)(nil), "Empty")
|
||||||
|
proto.RegisterType((*Boolean)(nil), "Boolean")
|
||||||
|
proto.RegisterType((*InputArray)(nil), "InputArray")
|
||||||
|
proto.RegisterType((*Init)(nil), "Init")
|
||||||
|
proto.RegisterType((*Input)(nil), "Input")
|
||||||
|
proto.RegisterType((*InputAdd)(nil), "InputAdd")
|
||||||
|
proto.RegisterType((*Output)(nil), "Output")
|
||||||
|
proto.RegisterEnum("Crawlers", Crawlers_name, Crawlers_value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ context.Context
|
||||||
|
var _ grpc1.ClientConn
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the grpc package it is being compiled against.
|
||||||
|
const _ = grpc1.SupportPackageIsVersion4
|
||||||
|
|
||||||
|
// Client API for Config service
|
||||||
|
|
||||||
|
type ConfigClient interface {
|
||||||
|
Add(ctx context.Context, in *InputAdd, opts ...grpc1.CallOption) (*Output, error)
|
||||||
|
Remove(ctx context.Context, in *Input, opts ...grpc1.CallOption) (*Output, error)
|
||||||
|
Init(ctx context.Context, in *InputArray, opts ...grpc1.CallOption) (*Output, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type configClient struct {
|
||||||
|
cc *grpc1.ClientConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewConfigClient(cc *grpc1.ClientConn) ConfigClient {
|
||||||
|
return &configClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configClient) Add(ctx context.Context, in *InputAdd, opts ...grpc1.CallOption) (*Output, error) {
|
||||||
|
out := new(Output)
|
||||||
|
err := grpc1.Invoke(ctx, "/Config/Add", in, out, c.cc, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configClient) Remove(ctx context.Context, in *Input, opts ...grpc1.CallOption) (*Output, error) {
|
||||||
|
out := new(Output)
|
||||||
|
err := grpc1.Invoke(ctx, "/Config/Remove", in, out, c.cc, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configClient) Init(ctx context.Context, in *InputArray, opts ...grpc1.CallOption) (*Output, error) {
|
||||||
|
out := new(Output)
|
||||||
|
err := grpc1.Invoke(ctx, "/Config/Init", in, out, c.cc, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Server API for Config service
|
||||||
|
|
||||||
|
type ConfigServer interface {
|
||||||
|
Add(context.Context, *InputAdd) (*Output, error)
|
||||||
|
Remove(context.Context, *Input) (*Output, error)
|
||||||
|
Init(context.Context, *InputArray) (*Output, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterConfigServer(s *grpc1.Server, srv ConfigServer) {
|
||||||
|
s.RegisterService(&_Config_serviceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Config_Add_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(InputAdd)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ConfigServer).Add(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc1.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/Config/Add",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ConfigServer).Add(ctx, req.(*InputAdd))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Config_Remove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(Input)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ConfigServer).Remove(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc1.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/Config/Remove",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ConfigServer).Remove(ctx, req.(*Input))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Config_Init_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(InputArray)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ConfigServer).Init(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc1.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/Config/Init",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ConfigServer).Init(ctx, req.(*InputArray))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _Config_serviceDesc = grpc1.ServiceDesc{
|
||||||
|
ServiceName: "Config",
|
||||||
|
HandlerType: (*ConfigServer)(nil),
|
||||||
|
Methods: []grpc1.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "Add",
|
||||||
|
Handler: _Config_Add_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "Remove",
|
||||||
|
Handler: _Config_Remove_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "Init",
|
||||||
|
Handler: _Config_Init_Handler,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Streams: []grpc1.StreamDesc{},
|
||||||
|
Metadata: "grpc.proto",
|
||||||
|
}
|
||||||
|
|
||||||
|
// Client API for Data service
|
||||||
|
|
||||||
|
type DataClient interface {
|
||||||
|
Get(ctx context.Context, in *Input, opts ...grpc1.CallOption) (*Output, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type dataClient struct {
|
||||||
|
cc *grpc1.ClientConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDataClient(cc *grpc1.ClientConn) DataClient {
|
||||||
|
return &dataClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dataClient) Get(ctx context.Context, in *Input, opts ...grpc1.CallOption) (*Output, error) {
|
||||||
|
out := new(Output)
|
||||||
|
err := grpc1.Invoke(ctx, "/Data/Get", in, out, c.cc, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Server API for Data service
|
||||||
|
|
||||||
|
type DataServer interface {
|
||||||
|
Get(context.Context, *Input) (*Output, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterDataServer(s *grpc1.Server, srv DataServer) {
|
||||||
|
s.RegisterService(&_Data_serviceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Data_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(Input)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(DataServer).Get(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc1.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/Data/Get",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(DataServer).Get(ctx, req.(*Input))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _Data_serviceDesc = grpc1.ServiceDesc{
|
||||||
|
ServiceName: "Data",
|
||||||
|
HandlerType: (*DataServer)(nil),
|
||||||
|
Methods: []grpc1.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "Get",
|
||||||
|
Handler: _Data_Get_Handler,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Streams: []grpc1.StreamDesc{},
|
||||||
|
Metadata: "grpc.proto",
|
||||||
|
}
|
||||||
|
|
||||||
|
// Client API for Status service
|
||||||
|
|
||||||
|
type StatusClient interface {
|
||||||
|
Status(ctx context.Context, in *Empty, opts ...grpc1.CallOption) (*Boolean, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type statusClient struct {
|
||||||
|
cc *grpc1.ClientConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStatusClient(cc *grpc1.ClientConn) StatusClient {
|
||||||
|
return &statusClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *statusClient) Status(ctx context.Context, in *Empty, opts ...grpc1.CallOption) (*Boolean, error) {
|
||||||
|
out := new(Boolean)
|
||||||
|
err := grpc1.Invoke(ctx, "/Status/Status", in, out, c.cc, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Server API for Status service
|
||||||
|
|
||||||
|
type StatusServer interface {
|
||||||
|
Status(context.Context, *Empty) (*Boolean, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterStatusServer(s *grpc1.Server, srv StatusServer) {
|
||||||
|
s.RegisterService(&_Status_serviceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Status_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(Empty)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(StatusServer).Status(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc1.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/Status/Status",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(StatusServer).Status(ctx, req.(*Empty))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _Status_serviceDesc = grpc1.ServiceDesc{
|
||||||
|
ServiceName: "Status",
|
||||||
|
HandlerType: (*StatusServer)(nil),
|
||||||
|
Methods: []grpc1.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "Status",
|
||||||
|
Handler: _Status_Status_Handler,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Streams: []grpc1.StreamDesc{},
|
||||||
|
Metadata: "grpc.proto",
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) }
|
||||||
|
|
||||||
|
var fileDescriptor0 = []byte{
|
||||||
|
// 576 bytes of a gzipped FileDescriptorProto
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4d, 0x6f, 0xd3, 0x40,
|
||||||
|
0x10, 0x6d, 0x6c, 0xc7, 0x4e, 0x26, 0x6d, 0x3a, 0x1d, 0xda, 0x12, 0xd2, 0x0f, 0x22, 0x23, 0xa1,
|
||||||
|
0x8a, 0x83, 0x0f, 0xa9, 0x84, 0xc4, 0x81, 0x83, 0x63, 0x9b, 0xc6, 0x28, 0x8e, 0xcd, 0xae, 0x55,
|
||||||
|
0xe8, 0x09, 0xb9, 0x8d, 0x29, 0x11, 0xad, 0x13, 0xb9, 0x1b, 0x50, 0xff, 0x05, 0x3f, 0x19, 0xf9,
|
||||||
|
0x23, 0xcd, 0x1e, 0x90, 0x90, 0xb8, 0xcd, 0x7b, 0x6f, 0xf6, 0xbd, 0x5d, 0x7b, 0x77, 0x00, 0x6e,
|
||||||
|
0xf3, 0xe5, 0x8d, 0xb5, 0xcc, 0x17, 0x62, 0x61, 0x1a, 0xd0, 0xf4, 0xee, 0x97, 0xe2, 0xd1, 0x7c,
|
||||||
|
0x09, 0xc6, 0x68, 0xb1, 0xb8, 0x4b, 0x93, 0x8c, 0xf6, 0xa1, 0x79, 0xf3, 0x3d, 0xbd, 0xf9, 0xd1,
|
||||||
|
0x6b, 0x0c, 0x1a, 0x67, 0x2d, 0x56, 0x01, 0xf3, 0x15, 0x80, 0x9f, 0x2d, 0x57, 0xc2, 0xce, 0xf3,
|
||||||
|
0xe4, 0x91, 0x0e, 0x40, 0x99, 0x67, 0xbd, 0xc6, 0x40, 0x3d, 0xeb, 0x0c, 0x9b, 0x96, 0x9f, 0xcd,
|
||||||
|
0x05, 0x53, 0xe6, 0x99, 0xf9, 0x0e, 0xb4, 0xa2, 0xa6, 0x13, 0xd0, 0xb2, 0xe4, 0x3e, 0x2d, 0x1d,
|
||||||
|
0xba, 0xc3, 0xb6, 0xe5, 0xe4, 0xc9, 0xaf, 0xbb, 0x34, 0x7f, 0x60, 0x25, 0x4d, 0x04, 0xda, 0x2c,
|
||||||
|
0x11, 0x49, 0x4f, 0x19, 0x34, 0xce, 0xb6, 0x59, 0x59, 0x9b, 0x6f, 0xa1, 0x59, 0xfa, 0xff, 0x6b,
|
||||||
|
0x6d, 0x17, 0x94, 0xf9, 0xac, 0x5c, 0xd9, 0x66, 0xca, 0x7c, 0x66, 0xbe, 0x87, 0x56, 0xb5, 0xaf,
|
||||||
|
0xd9, 0xec, 0x7f, 0x62, 0x63, 0xd0, 0xc3, 0x95, 0x28, 0x72, 0x8f, 0xa1, 0xfd, 0x20, 0x92, 0x5c,
|
||||||
|
0xb8, 0x89, 0xa8, 0x1c, 0x54, 0xb6, 0x21, 0xa8, 0x07, 0x46, 0x9a, 0xcd, 0x4a, 0x4d, 0x29, 0xb5,
|
||||||
|
0x35, 0x7c, 0x72, 0x55, 0x37, 0xae, 0x6f, 0x7e, 0x6b, 0xd0, 0x5a, 0x87, 0x53, 0x1f, 0x0e, 0xc7,
|
||||||
|
0x9e, 0x3d, 0x89, 0xc7, 0x5f, 0x6d, 0x27, 0xf6, 0x2f, 0x3d, 0xd7, 0x67, 0x9e, 0x13, 0x87, 0xec,
|
||||||
|
0x0a, 0xb7, 0xa8, 0x0b, 0x50, 0x6b, 0xee, 0x94, 0x63, 0x43, 0xc2, 0x1f, 0xe2, 0x08, 0x15, 0xda,
|
||||||
|
0x85, 0xce, 0x06, 0x73, 0x54, 0x25, 0xc2, 0x0f, 0xec, 0x08, 0x35, 0x89, 0x98, 0xb8, 0x76, 0x84,
|
||||||
|
0x4d, 0x22, 0xe8, 0xd6, 0x44, 0x10, 0x4e, 0x2f, 0x42, 0x77, 0x84, 0x3a, 0x21, 0x6c, 0xaf, 0x39,
|
||||||
|
0xce, 0x3f, 0x4d, 0xd0, 0x90, 0x99, 0xab, 0x82, 0x69, 0xc9, 0xeb, 0x6c, 0xe6, 0xdb, 0xee, 0x08,
|
||||||
|
0xdb, 0x52, 0x57, 0x74, 0x51, 0x74, 0x81, 0xd4, 0x35, 0xf5, 0xe2, 0x91, 0x1f, 0x72, 0xec, 0xd0,
|
||||||
|
0x1e, 0xec, 0xd4, 0x5c, 0xc8, 0x6c, 0x67, 0xe2, 0xe1, 0xb6, 0xb4, 0xab, 0x28, 0x8c, 0xce, 0x71,
|
||||||
|
0x47, 0x72, 0x62, 0x9e, 0xeb, 0x73, 0xec, 0x4a, 0x47, 0x65, 0x81, 0x8f, 0xbb, 0x12, 0xe6, 0xc1,
|
||||||
|
0x08, 0x51, 0xb2, 0xe0, 0x41, 0x1c, 0xe1, 0x9e, 0x14, 0xcd, 0xa7, 0x41, 0x74, 0x39, 0x74, 0x90,
|
||||||
|
0xa4, 0xe8, 0x92, 0x3b, 0xc7, 0x67, 0xb2, 0x0f, 0x1f, 0xe3, 0xbe, 0xd4, 0x12, 0x7b, 0x93, 0xa9,
|
||||||
|
0x17, 0xe3, 0x81, 0xd4, 0xf2, 0x39, 0xf0, 0xf1, 0x90, 0xf6, 0x01, 0x6b, 0xec, 0xd8, 0x9c, 0xdb,
|
||||||
|
0x53, 0x97, 0xd9, 0xf8, 0x5c, 0xda, 0xc0, 0x38, 0x8e, 0x23, 0xec, 0x91, 0x01, 0x6a, 0xf1, 0x11,
|
||||||
|
0x5e, 0x50, 0x0b, 0xb4, 0x22, 0x0e, 0xfb, 0x05, 0x55, 0x58, 0x1c, 0x15, 0xc5, 0xc7, 0xe0, 0x0b,
|
||||||
|
0x1e, 0x53, 0x1b, 0x9a, 0xd5, 0x09, 0x4f, 0xa8, 0x03, 0xc6, 0xfa, 0x17, 0x9c, 0x0e, 0xaf, 0x41,
|
||||||
|
0x77, 0x16, 0xd9, 0xb7, 0xf9, 0x2d, 0x1d, 0x81, 0x5a, 0x5c, 0xd6, 0xb6, 0xb5, 0xbe, 0xb7, 0x7d,
|
||||||
|
0xc3, 0xaa, 0xee, 0xa0, 0xb9, 0x45, 0x47, 0xa0, 0xb3, 0xf4, 0x7e, 0xf1, 0x33, 0x25, 0xbd, 0xd2,
|
||||||
|
0x65, 0xf1, 0xb4, 0x7e, 0x5e, 0x1d, 0x6b, 0xf3, 0x14, 0x25, 0x7d, 0x38, 0x00, 0xcd, 0x4d, 0x44,
|
||||||
|
0x42, 0x3d, 0x50, 0x2f, 0x52, 0xf1, 0x17, 0x87, 0xe1, 0x6b, 0xd0, 0xb9, 0x48, 0xc4, 0xea, 0x81,
|
||||||
|
0x8e, 0x9f, 0x2a, 0xdd, 0x2a, 0x47, 0x40, 0xbf, 0x65, 0xd5, 0x13, 0xc0, 0xdc, 0xba, 0xd6, 0xcb,
|
||||||
|
0xf1, 0x70, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x5f, 0x44, 0x44, 0x2c, 0x04, 0x00, 0x00,
|
||||||
|
}
|
83
crawler/grpc/grpc.proto
Normal file
83
crawler/grpc/grpc.proto
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
enum Crawlers {
|
||||||
|
HEALTH_ACTIVEDIRECTORY = 0;
|
||||||
|
HEALTH_DNS = 1;
|
||||||
|
HEALTH_FTP = 2;
|
||||||
|
HEALTH_FTPS = 3;
|
||||||
|
HEALTH_IMAP = 4;
|
||||||
|
HEALTH_LDAP = 5;
|
||||||
|
HEALTH_MONGODB = 6;
|
||||||
|
HEALTH_MSSQL = 7;
|
||||||
|
HEALTH_MYSQL = 8;
|
||||||
|
HEALTH_MARIADB = 9;
|
||||||
|
HEALTH_PGSQL = 10;
|
||||||
|
HEALTH_NETBIOS = 11;
|
||||||
|
HEALTH_ORACLE = 12;
|
||||||
|
HEALTH_POP3 = 13;
|
||||||
|
HEALTH_REDIS = 14;
|
||||||
|
HEALTH_RMI = 15;
|
||||||
|
HEALTH_SMB = 16;
|
||||||
|
HEALTH_SMTP = 17;
|
||||||
|
HEALTH_SNMPV2C = 18;
|
||||||
|
HEALTH_SNMPV3 = 19;
|
||||||
|
HEALTH_SSH = 20;
|
||||||
|
HEALTH_TELNET = 21;
|
||||||
|
HEALTH_WMI = 22;
|
||||||
|
HEALTH_CASSANDRA = 23;
|
||||||
|
HEALTH_HTTP = 24;
|
||||||
|
SQL = 25;
|
||||||
|
SNMP = 26;
|
||||||
|
WMI = 27;
|
||||||
|
JMX = 28;
|
||||||
|
REDIS = 29;
|
||||||
|
MONGODB = 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
// services
|
||||||
|
service Config {
|
||||||
|
rpc Add (InputAdd) returns (Output) {}
|
||||||
|
rpc Remove (Input) returns (Output) {}
|
||||||
|
rpc Init (InputArray) returns (Output) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
service Data {
|
||||||
|
rpc Get (Input) returns (Output) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
service Status {
|
||||||
|
rpc Status(Empty) returns (Boolean) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
message Empty {}
|
||||||
|
message Boolean {
|
||||||
|
bool check = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message InputArray {
|
||||||
|
repeated Init in = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Init {
|
||||||
|
Crawlers name = 1;
|
||||||
|
bytes data = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Input {
|
||||||
|
Crawlers name = 1;
|
||||||
|
string id =2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message InputAdd {
|
||||||
|
Crawlers name = 1;
|
||||||
|
bytes data =2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// response models
|
||||||
|
message Output {
|
||||||
|
int64 startDate = 1;
|
||||||
|
int64 endDate = 2;
|
||||||
|
bytes data = 3;
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package activedirectory_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/activedirectory"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ActiveDirectoryHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *ActiveDirectoryHealthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewActiveDirectoryHealthCrawler() *ActiveDirectoryHealthCrawler {
|
||||||
|
ad := &ActiveDirectoryHealthCrawler{}
|
||||||
|
ad.SetInternal(ad)
|
||||||
|
ad.SetMatcher(activedirectory.NewActiveDirectoryMatcher())
|
||||||
|
return ad
|
||||||
|
}
|
@ -0,0 +1,109 @@
|
|||||||
|
package activedirectory_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.1", 389, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestCheckSSL(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.1", 636, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.1", Port: 389, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewActiveDirectoryHealthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.1"
|
||||||
|
m["port"] = "389"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ad", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ad", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ad", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ad",
|
||||||
|
Id: "ad",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package cassandra_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/cassandra"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CassandraHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *CassandraHealthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewCassandraHealthCrawler() *CassandraHealthCrawler {
|
||||||
|
r := &CassandraHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(cassandra.NewCassandraMatcher())
|
||||||
|
return r
|
||||||
|
}
|
@ -0,0 +1,104 @@
|
|||||||
|
package cassandra_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewCassandraHealthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.104"
|
||||||
|
m["port"] = "9042"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ad", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ad", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ad", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ad",
|
||||||
|
Id: "ad",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.104", 9042, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: true}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.104", Port: 9042, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HeahthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,28 @@
|
|||||||
|
package dns_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/dns"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DNSHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *DNSHealthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDNSHealthCrawler() *DNSHealthCrawler {
|
||||||
|
r := &DNSHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(dns.NewDnsMatcher())
|
||||||
|
return r
|
||||||
|
}
|
@ -0,0 +1,104 @@
|
|||||||
|
package dns_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewDNSHealthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "53"
|
||||||
|
m["portType"] = "udp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ad", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ad", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ad", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ad",
|
||||||
|
Id: "ad",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 53, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 53, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,121 @@
|
|||||||
|
package ftp_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/packet"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/model/scaninfo"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
statusReadyServer = "120"
|
||||||
|
statusOK = "200"
|
||||||
|
statusNewConnectOK = "220"
|
||||||
|
statusSystemNameOK = "215"
|
||||||
|
statusCloseConnect = "221"
|
||||||
|
statusUnkownCMD = "202"
|
||||||
|
statusTlsUseOK = "234"
|
||||||
|
statusCloseControlConnect = "421"
|
||||||
|
statusSyntaxErr = "500"
|
||||||
|
statusParamSyntaxErr = "501"
|
||||||
|
statusNotUseCMD = "502"
|
||||||
|
statusIncorrectCMD = "503"
|
||||||
|
statusUserLoginRequied = "530"
|
||||||
|
statusTlsNotUse = "534"
|
||||||
|
statusNeedUserId = "332"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FTPMatcher struct {
|
||||||
|
sendPackets []*packet.Packet
|
||||||
|
isFtps bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFTPMatcher() *FTPMatcher {
|
||||||
|
|
||||||
|
ftm := FTPMatcher{}
|
||||||
|
|
||||||
|
sysStr := "SYST\r\n"
|
||||||
|
systByte := make([]byte, len(sysStr))
|
||||||
|
copy(systByte[:], sysStr)
|
||||||
|
ftm.sendPackets = append(ftm.sendPackets, packet.NewPacket(systByte, len(sysStr)))
|
||||||
|
|
||||||
|
passStr := "PASS \r\n"
|
||||||
|
passByte := make([]byte, len(passStr))
|
||||||
|
copy(passByte[:], passStr)
|
||||||
|
ftm.sendPackets = append(ftm.sendPackets, packet.NewPacket(passByte, len(passStr)))
|
||||||
|
|
||||||
|
quitStr := "QUIT\r\n"
|
||||||
|
quitByte := make([]byte, len(quitStr))
|
||||||
|
copy(quitByte[:], quitStr)
|
||||||
|
ftm.sendPackets = append(ftm.sendPackets, packet.NewPacket(quitByte, len(quitStr)))
|
||||||
|
|
||||||
|
return &ftm
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *FTPMatcher) Match(idx int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
|
||||||
|
result := false
|
||||||
|
|
||||||
|
if packet == nil || packet.Buffer == nil || packet.Len == 0 {
|
||||||
|
log.Println("Packet nil")
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
str := string(packet.Buffer)
|
||||||
|
|
||||||
|
code := str[:3]
|
||||||
|
|
||||||
|
if idx == 0 {
|
||||||
|
switch code {
|
||||||
|
case statusNewConnectOK, statusReadyServer:
|
||||||
|
//fmt.Println(code)
|
||||||
|
result = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else if idx == 1 {
|
||||||
|
switch code {
|
||||||
|
case statusSystemNameOK, statusSyntaxErr, statusParamSyntaxErr, statusNotUseCMD, statusUserLoginRequied:
|
||||||
|
//fmt.Println(code)
|
||||||
|
result = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else if idx == 2 {
|
||||||
|
switch code {
|
||||||
|
case statusIncorrectCMD, statusParamSyntaxErr, statusNotUseCMD, statusNeedUserId, statusUserLoginRequied:
|
||||||
|
//fmt.Println(code)
|
||||||
|
result = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else if idx == 3 {
|
||||||
|
switch code {
|
||||||
|
case statusCloseConnect, statusSyntaxErr:
|
||||||
|
//fmt.Println(code)
|
||||||
|
result = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPMatcher) PacketCount() int {
|
||||||
|
return len(ftp.sendPackets)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPMatcher) Packet(index int) *packet.Packet {
|
||||||
|
return ftp.sendPackets[index]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPMatcher) ServiceName() string {
|
||||||
|
return "FTP"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPMatcher) IsError(index int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPMatcher) IsNoResponse(index int) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPMatcher) IsPrePacket() bool {
|
||||||
|
return true
|
||||||
|
}
|
@ -0,0 +1,179 @@
|
|||||||
|
package ftp_protocol_crawler_go
|
||||||
|
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"encoding/json"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FTPHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (r *FTPHealthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFTPHealthCrawler() *FTPHealthCrawler {
|
||||||
|
r := &FTPHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(NewFTPMatcher())
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
////////////// Delegate.Get implement /////////////////
|
||||||
|
//type FTPProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *FTPProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := ftp.NewFTPMatcher()
|
||||||
|
//
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
// if m.Match(0, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
//
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if matchFtp(i+1, p) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func matchFtp(idx int, packet *packet.Packet) bool {
|
||||||
|
// result := false
|
||||||
|
//
|
||||||
|
// if packet == nil || packet.Buffer == nil || packet.Len == 0 {
|
||||||
|
// log.Println("Packet nil")
|
||||||
|
// return result
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// str := string(packet.Buffer)
|
||||||
|
//
|
||||||
|
// code := str[:3]
|
||||||
|
//
|
||||||
|
// if idx == 0 {
|
||||||
|
// switch code {
|
||||||
|
// case statusNewConnectOK, statusReadyServer:
|
||||||
|
// //fmt.Println(code)
|
||||||
|
// result = true
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// } else if idx == 1 {
|
||||||
|
// switch code {
|
||||||
|
// case statusSystemNameOK, statusSyntaxErr, statusParamSyntaxErr, statusNotUseCMD, statusUserLoginRequied:
|
||||||
|
// //fmt.Println(code)
|
||||||
|
// result = true
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// } else if idx == 2 {
|
||||||
|
// switch code {
|
||||||
|
// case statusIncorrectCMD, statusParamSyntaxErr, statusNotUseCMD, statusNeedUserId, statusUserLoginRequied:
|
||||||
|
// //fmt.Println(code)
|
||||||
|
// result = true
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// } else if idx == 3 {
|
||||||
|
// switch code {
|
||||||
|
// case statusCloseConnect, statusSyntaxErr:
|
||||||
|
// //fmt.Println(code)
|
||||||
|
// result = true
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return result
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(FTPProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,93 @@
|
|||||||
|
package ftp_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
r := NewFTPHealthCrawler()
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "21"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ftp", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ftp", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ftp", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ftp",
|
||||||
|
Id: "ftp",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 21, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 21, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,75 @@
|
|||||||
|
package ftps_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/packet"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/model/scaninfo"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
statusOK = "200"
|
||||||
|
statusNewConnectOK = "220"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FTPSMatcher struct {
|
||||||
|
sendPackets []*packet.Packet
|
||||||
|
isFtps bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFTPSMatcher() *FTPSMatcher {
|
||||||
|
|
||||||
|
f := FTPSMatcher{}
|
||||||
|
|
||||||
|
pbs := "PBSZ 0\r\n"
|
||||||
|
pbsByte := make([]byte, len(pbs))
|
||||||
|
copy(pbsByte[:], pbs)
|
||||||
|
f.sendPackets = append(f.sendPackets, packet.NewPacket(pbsByte, len(pbs)))
|
||||||
|
|
||||||
|
prot := "PROT P\r\n"
|
||||||
|
protByte := make([]byte, len(prot))
|
||||||
|
copy(protByte[:], prot)
|
||||||
|
f.sendPackets = append(f.sendPackets, packet.NewPacket(protByte, len(prot)))
|
||||||
|
|
||||||
|
quitStr := "QUIT\r\n"
|
||||||
|
quitByte := make([]byte, len(quitStr))
|
||||||
|
copy(quitByte[:], quitStr)
|
||||||
|
f.sendPackets = append(f.sendPackets, packet.NewPacket(quitByte, len(quitStr)))
|
||||||
|
|
||||||
|
return &f
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPSMatcher) Match(idx int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
|
||||||
|
result := false
|
||||||
|
|
||||||
|
str := string(packet.Buffer)
|
||||||
|
code := str[:3]
|
||||||
|
|
||||||
|
if code == statusOK || code == statusNewConnectOK {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPSMatcher) PacketCount() int {
|
||||||
|
return len(ftp.sendPackets)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPSMatcher) Packet(index int) *packet.Packet {
|
||||||
|
return ftp.sendPackets[index]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPSMatcher) ServiceName() string {
|
||||||
|
return "FTPS"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPSMatcher) IsError(index int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPSMatcher) IsNoResponse(index int) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ftp *FTPSMatcher) IsPrePacket() bool {
|
||||||
|
return true
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package ftps_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/ftp"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FTPSHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (r *FTPSHealthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFTPSHealthCrawler() *FTPSHealthCrawler {
|
||||||
|
r := &FTPSHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(ftp.NewFTPMatcher())
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
////////////// Delegate.Get implement /////////////////
|
||||||
|
//type FTPSProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *FTPSProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := ftp.StartCheckFTPS(input.Ip, strconv.Itoa(int(input.Port)))
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(FTPSProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,87 @@
|
|||||||
|
package ftps_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
r := NewFTPSHealthCrawler()
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.103"
|
||||||
|
m["port"] = "2121"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ftps", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ftps", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ftps", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ftps",
|
||||||
|
Id: "ftps",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 21, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, false, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,120 @@
|
|||||||
|
package http_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/http"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HTTPHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *HTTPHealthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
func NewHTTPHealthCrawler() *HTTPHealthCrawler {
|
||||||
|
r := &HTTPHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(http.NewHTTPMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//package main
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "log"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "encoding/json"
|
||||||
|
// "strconv"
|
||||||
|
// "net"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/http"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// "git.loafle.net/overflow/collector/discovery/types/timestamp"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//type HttpProtocol struct {
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func (h *HttpProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// log.Println("data : " + string(input.Data))
|
||||||
|
// pr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &pr)
|
||||||
|
//
|
||||||
|
// output.StartDate = timestamp.Now()
|
||||||
|
// match, err := check(input.Ip, input.Port)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// log.Println(err.Error())
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// output.EndDate = timestamp.Now()
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch:match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// log.Println(err.Error())
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data:b}
|
||||||
|
//
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16) (bool,error) {
|
||||||
|
//
|
||||||
|
// var targetHost string = ip
|
||||||
|
// targetHost += ":"
|
||||||
|
// targetHost += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// conn, err := net.Dial("tcp", targetHost)
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
// hp := http.NewHTTPMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < hp.PacketCount(); i++ {
|
||||||
|
// pack := hp.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
//
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// l, _ := conn.Read(bytes)
|
||||||
|
//
|
||||||
|
// p := packet.NewPacket(bytes, l)
|
||||||
|
//
|
||||||
|
// if hp.Match(i, p, nil) == false{
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(HttpProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,87 @@
|
|||||||
|
package http_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewHTTPHealthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.105"
|
||||||
|
m["port"] = "80"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ad", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ad", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ad", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ad",
|
||||||
|
Id: "ad",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package main
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "testing"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestHttpProtocol_Get(t *testing.T) {
|
||||||
|
// b, err := check("192.168.1.105", 80)
|
||||||
|
// if err != nil {
|
||||||
|
// t.Error(err)
|
||||||
|
// }
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
@ -0,0 +1,129 @@
|
|||||||
|
package imap_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/imap"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IMAPHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *IMAPHealthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewIMAPHealthCrawler() *IMAPHealthCrawler {
|
||||||
|
r := &IMAPHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(imap.NewIMAPMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//package imap
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "crypto/tls"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/imap"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type ImapProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *ImapProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := imap.NewIMAPMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(ImapProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,110 @@
|
|||||||
|
package imap_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewIMAPHealthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "993"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = true
|
||||||
|
|
||||||
|
r.PutConfig("ad", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ad", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ad", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ad",
|
||||||
|
Id: "ad",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 143, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestCheckSSL(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 993, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 143, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,132 @@
|
|||||||
|
package ldap_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/ldap"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LDAPHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *LDAPHealthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewLDAPHealthCrawler() *LDAPHealthCrawler {
|
||||||
|
r := &LDAPHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(ldap.NewLDAPMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "crypto/tls"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/ldap"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type LDAPProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *LDAPProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := ldap.NewLDAPMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.IsNoResponse(i) == true { // empty last response
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(LDAPProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,110 @@
|
|||||||
|
package ldap_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewLDAPHealthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "389"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ad", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ad", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ad", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ad",
|
||||||
|
Id: "ad",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 389, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestCheckSSL(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 636, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 389, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,128 @@
|
|||||||
|
package mongodb_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/mongodb"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MongoDBHealthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *MongoDBHealthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMongoDBHealthCrawler() *MongoDBHealthCrawler {
|
||||||
|
r := &MongoDBHealthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(mongodb.NewMongoDBMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "crypto/tls"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/mongodb"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type MongoDBProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *MongoDBProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := mongodb.NewMongoDBMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(MongoDBProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,105 @@
|
|||||||
|
package mongodb_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewMongoDBHealthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.104"
|
||||||
|
m["port"] = "27017"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("ad", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("ad", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("ad", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "ad",
|
||||||
|
Id: "ad",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.104", 27017, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: true}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.104", Port: 27017, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,104 @@
|
|||||||
|
package mssql_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/mssql"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MSSqlHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *MSSqlHeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
func NewMSSqlHeahthCrawler() *MSSqlHeahthCrawler {
|
||||||
|
r := &MSSqlHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(mssql.NewMSSqlMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/mssql"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type MSSQLProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *MSSQLProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// log.Println("data : " + string(input.Data))
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16) (bool, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := mssql.NewMSSqlMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
//
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(MSSQLProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,86 @@
|
|||||||
|
package mssql_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewMSSqlHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.106"
|
||||||
|
m["port"] = "1433"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "testing"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestMatch(t *testing.T) {
|
||||||
|
// b, err := check("192.168.1.106", 1433)
|
||||||
|
// if err != nil {
|
||||||
|
// t.Error(err)
|
||||||
|
// }
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
@ -0,0 +1,107 @@
|
|||||||
|
package mysql_protocol_crawler_go
|
||||||
|
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/mysql"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MysqlHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *MysqlHeahthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMysqlHeahthCrawler() *MysqlHeahthCrawler {
|
||||||
|
r := &MysqlHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(mysql.NewMySqlMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/mysql"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type MySQLProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *MySQLProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// log.Println("data : " + string(input.Data))
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16) (bool, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := mysql.NewMySqlMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
//
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(MySQLProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,86 @@
|
|||||||
|
package mysql_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewMysqlHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.103"
|
||||||
|
m["port"] = "3306"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("redis", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("redis", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("redis", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "redis",
|
||||||
|
Id: "redis",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "testing"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestMatch(t *testing.T) {
|
||||||
|
// b, err := check("192.168.1.103", 3306)
|
||||||
|
// if err != nil {
|
||||||
|
// t.Error(err)
|
||||||
|
// }
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
@ -0,0 +1,109 @@
|
|||||||
|
package netbios_protocol_crawler_go
|
||||||
|
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/netbios"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetbiosHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *NetbiosHeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNetbiosHeahthCrawler() *NetbiosHeahthCrawler {
|
||||||
|
r := &NetbiosHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(netbios.NewNetBiosMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/netbios"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type NetBiosProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *NetBiosProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := netbios.NewNetBiosMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// if m.IsNoResponse(i) == true { // empty last response
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(NetBiosProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,105 @@
|
|||||||
|
package netbios_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewNetbiosHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.106"
|
||||||
|
m["port"] = "139"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.106", 139, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.106", Port: 139, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,147 @@
|
|||||||
|
package oracle_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/oracle"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type OracleHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *OracleHeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewOracleHeahthCrawler() *OracleHeahthCrawler {
|
||||||
|
r := &OracleHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(oracle.NewOracleMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package oracle_protocol_crawler
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "strconv"
|
||||||
|
// "crypto/tls"
|
||||||
|
// "net"
|
||||||
|
//
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/oracle"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
//
|
||||||
|
// "log"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type OracleProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *OracleProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := oracle.NewOracleMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
//
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(OracleProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,127 @@
|
|||||||
|
package oracle_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewOracleHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.30"
|
||||||
|
m["port"] = "1521"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "testing"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestMatch(t *testing.T) {
|
||||||
|
// b, err := check("192.168.1.106", 1433)
|
||||||
|
// if err != nil {
|
||||||
|
// t.Error(err)
|
||||||
|
// }
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
|
||||||
|
//package oracle_protocol_crawler
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.30", 1521, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestCheckTls(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 22, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.30", Port: 1521, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,105 @@
|
|||||||
|
package pgsql_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/pgsql"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PGSqlHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *PGSqlHeahthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPGSqlHeahthCrawler() *PGSqlHeahthCrawler {
|
||||||
|
r := &PGSqlHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(pgsql.NewPostgreSQLMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/mssql"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type PGSQLProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *PGSQLProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// log.Println("data : " + string(input.Data))
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16) (bool, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := mssql.NewPGSqlMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
//
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(PGSQLProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,86 @@
|
|||||||
|
package pgsql_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewPGSqlHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.107"
|
||||||
|
m["port"] = "5432"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "testing"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestMatch(t *testing.T) {
|
||||||
|
// b, err := check("192.168.1.106", 1433)
|
||||||
|
// if err != nil {
|
||||||
|
// t.Error(err)
|
||||||
|
// }
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
@ -0,0 +1,130 @@
|
|||||||
|
package pop3_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/pop"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type POP3HeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *POP3HeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPOP3HeahthCrawler() *POP3HeahthCrawler {
|
||||||
|
r := &POP3HeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(pop.NewPOPMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package pop3
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "crypto/tls"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/pop"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type Pop3Protocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *Pop3Protocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
// //
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := pop.NewPOPMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(Pop3Protocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,111 @@
|
|||||||
|
package pop3_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewPOP3HeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "110"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package pop3
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 110, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestCheckSSL(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 995, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 143, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,28 @@
|
|||||||
|
package redis_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/redis"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RedisHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RedisHeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRedisHeahthCrawler() *RedisHeahthCrawler {
|
||||||
|
r := &RedisHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(redis.NewRedisMatcher())
|
||||||
|
return r
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package redis_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler/config"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewRedisHeahthCrawler()
|
||||||
|
|
||||||
|
m := config.Config{}
|
||||||
|
m.Target = config.Target{}
|
||||||
|
m.Target.Connection = config.Connection{}
|
||||||
|
m.Target.Connection.Ip = "192.168.1.104"
|
||||||
|
m.Target.Connection.Port = "6379"
|
||||||
|
m.Target.Connection.PortType = "tcp"
|
||||||
|
m.Target.Connection.SSL = false
|
||||||
|
|
||||||
|
r.PutConfig("redis", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
b, _ := r.Get("redis")
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(b, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// r := setConfig()
|
||||||
|
//
|
||||||
|
// of_rpc.AddDelegate("redis", r)
|
||||||
|
// err := of_rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(2 * time.Second)
|
||||||
|
//
|
||||||
|
// in := param.Input{
|
||||||
|
// Name: "redis",
|
||||||
|
// Id: "redis",
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// t.Fatal(err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var check bool
|
||||||
|
// json.Unmarshal(result.Data, &check)
|
||||||
|
// assert.Equal(t, true, check)
|
||||||
|
//}
|
@ -0,0 +1,107 @@
|
|||||||
|
package rmi_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/rmi"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RMIHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RMIHeahthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
func NewRMIHeahthCrawler() *RMIHeahthCrawler {
|
||||||
|
r := &RMIHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(rmi.NewRMIMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//package imap
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/rmi"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type RMIProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *RMIProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := rmi.NewRMIMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.IsNoResponse(i) == true { // empty last response
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(RMIProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,106 @@
|
|||||||
|
package rmi_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewRMIHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.103"
|
||||||
|
m["port"] = "9840"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package imap
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.103", 9840, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.103", Port: 9840, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,150 @@
|
|||||||
|
package smb_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/smb"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SMBHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SMBHeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSMBHeahthCrawler() *SMBHeahthCrawler {
|
||||||
|
r := &SMBHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(smb.NewSMBMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package smb_protocol_crawler
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "strconv"
|
||||||
|
//
|
||||||
|
// "net"
|
||||||
|
//
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/smb"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
//
|
||||||
|
// "log"
|
||||||
|
// "crypto/tls"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type SMBProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *SMBProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := smb.NewSMBMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.IsNoResponse(i) == true { // empty last response
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(SMBProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,108 @@
|
|||||||
|
package smb_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewSMBHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.106"
|
||||||
|
m["port"] = "445"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package smb_protocol_crawler
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.106", 445, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.106", Port: 445, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,137 @@
|
|||||||
|
package smtp_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/smtp"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SMTPHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SMTPHeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSMTPHeahthCrawler() *SMTPHeahthCrawler {
|
||||||
|
r := &SMTPHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(smtp.NewSmtpMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package smtp
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "crypto/tls"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/smtp"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "log"
|
||||||
|
// "net"
|
||||||
|
// "strconv"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type SMTPProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *SMTPProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// rres := &protocol.HealthResponse{IsMatch: match}
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(&rres)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := smtp.NewSmtpMatcher()
|
||||||
|
//
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
// if m.Match(0, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
//
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i+1, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
// rpc.SetDelegate(new(SMTPProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,111 @@
|
|||||||
|
package smtp_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewSMTPHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "25"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package smtp
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 25, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestCheckSSL(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 465, true)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 25, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,137 @@
|
|||||||
|
package snmpv2c_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/snmp"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SNMPV2CHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SNMPV2CHeahthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSNMPV2CHeahthCrawler() *SNMPV2CHeahthCrawler {
|
||||||
|
r := &SNMPV2CHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(snmp.NewSNMPv2Matcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package snmpv2c_protocol_crawler
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "strconv"
|
||||||
|
//
|
||||||
|
// "net"
|
||||||
|
//
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/snmp"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
//
|
||||||
|
// "log"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type SNMPv2cProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *SNMPv2cProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("udp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return nil, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := snmp.NewSNMPv2Matcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.IsNoResponse(i) == true { // empty last response
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(SNMPv2cProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,106 @@
|
|||||||
|
package snmpv2c_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewSNMPV2CHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "161"
|
||||||
|
m["portType"] = "udp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package snmpv2c_protocol_crawler
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "time"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "testing"
|
||||||
|
// "encoding/json"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 161, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 161, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,137 @@
|
|||||||
|
package snmpv3_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/snmp"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SNMPV3HeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SNMPV3HeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSNMPV3HeahthCrawler() *SNMPV3HeahthCrawler {
|
||||||
|
r := &SNMPV3HeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(snmp.NewSNMPv3Matcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
//package snmpv3_protocol_crawler
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "strconv"
|
||||||
|
//
|
||||||
|
// "net"
|
||||||
|
//
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/snmp"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
//
|
||||||
|
// "log"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type SNMPv3Protocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *SNMPv3Protocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("udp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return nil, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := snmp.NewSNMPv3Matcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.IsNoResponse(i) == true { // empty last response
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(SNMPv3Protocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,106 @@
|
|||||||
|
package snmpv3_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewSNMPV3HeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.254"
|
||||||
|
m["port"] = "161"
|
||||||
|
m["portType"] = "udp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package snmpv3_protocol_crawler
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "time"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "testing"
|
||||||
|
// "encoding/json"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.254", 161, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.254", Port: 161, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,152 @@
|
|||||||
|
package ssh_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/ssh"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SSHHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SSHHeahthCrawler) Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
func NewSSHHeahthCrawler() *SSHHeahthCrawler {
|
||||||
|
r := &SSHHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(ssh.NewSSHMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package ssh_protocol_crawler
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "strconv"
|
||||||
|
// "crypto/tls"
|
||||||
|
// "net"
|
||||||
|
//
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/ssh"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
//
|
||||||
|
// "log"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type SSHProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *SSHProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := ssh.NewSSHMatcher()
|
||||||
|
//
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
// if m.Match(0, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
//
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i+1, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(SSHProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,107 @@
|
|||||||
|
package ssh_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewSSHHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "22"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package ssh_protocol_crawler
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 22, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 22, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,151 @@
|
|||||||
|
package telnet_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/telnet"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TelnetHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *TelnetHeahthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewTelnetHeahthCrawler() *TelnetHeahthCrawler {
|
||||||
|
r := &TelnetHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(telnet.NewTelnetMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package main
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "strconv"
|
||||||
|
// "crypto/tls"
|
||||||
|
// "net"
|
||||||
|
//
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/telnet"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
//
|
||||||
|
// "log"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type TelnetProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *TelnetProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// match, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = match
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := telnet.NewTelnetMatcher()
|
||||||
|
//
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
// if m.Match(0, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
//
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.Match(i+1, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(TelnetProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,108 @@
|
|||||||
|
package telnet_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewTelnetHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.215"
|
||||||
|
m["port"] = "23"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package main
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "testing"
|
||||||
|
// "time"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.215", 23, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.215", Port: 23, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
@ -0,0 +1,148 @@
|
|||||||
|
package wmi_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/wmi"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type WMIHeahthCrawler struct {
|
||||||
|
crawler.SocketHeahthCrawler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *WMIHeahthCrawler)Internal(params config.Config) ([]byte, error) {
|
||||||
|
|
||||||
|
b, err := r.CheckHeahth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWMIHeahthCrawler() *WMIHeahthCrawler {
|
||||||
|
r := &WMIHeahthCrawler{}
|
||||||
|
r.SetInternal(r)
|
||||||
|
r.SetMatcher(wmi.NewWMIMatcher())
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//package wmi_protocol_crawler
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "encoding/json"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "strconv"
|
||||||
|
// "crypto/tls"
|
||||||
|
// "net"
|
||||||
|
//
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/wmi"
|
||||||
|
// "git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
|
||||||
|
// rpc "git.loafle.net/overflow/of_rpc/json"
|
||||||
|
//
|
||||||
|
// "log"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//////////////// Delegate.Get implement /////////////////
|
||||||
|
//type WMIProtocol struct{}
|
||||||
|
//
|
||||||
|
//func (r *WMIProtocol) Get(input *param.Input, output *param.Output) error {
|
||||||
|
//
|
||||||
|
// rr := &protocol.HealthRequest{}
|
||||||
|
// json.Unmarshal(input.Data, &rr)
|
||||||
|
//
|
||||||
|
// rres, err := check(input.Ip, input.Port, rr.IsSSL)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// retVal := &protocol.HealthResponse{}
|
||||||
|
// retVal.IsMatch = rres
|
||||||
|
//
|
||||||
|
// b, err := json.Marshal(retVal)
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// *output = param.Output{Data: b}
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func connect(ip string, port uint16, ssl bool) (net.Conn, error) {
|
||||||
|
//
|
||||||
|
// var addr string = ip
|
||||||
|
// addr += ":"
|
||||||
|
// addr += strconv.Itoa(int(port))
|
||||||
|
//
|
||||||
|
// if ssl == false {
|
||||||
|
// conn, err := net.Dial("tcp", addr)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// } else {
|
||||||
|
// conn, err := tls.Dial(
|
||||||
|
// "tcp",
|
||||||
|
// addr,
|
||||||
|
// &tls.Config{
|
||||||
|
// InsecureSkipVerify: true,
|
||||||
|
// ServerName: ip,
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// return conn, nil
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//func check(ip string, port uint16, ssl bool) (bool, error) {
|
||||||
|
//
|
||||||
|
// conn, err := connect(ip, port, ssl)
|
||||||
|
// if err != nil {
|
||||||
|
// return false, err
|
||||||
|
// }
|
||||||
|
// defer conn.Close()
|
||||||
|
//
|
||||||
|
// m := wmi.NewWMIMatcher()
|
||||||
|
//
|
||||||
|
// for i := 0; i < m.PacketCount(); i++ {
|
||||||
|
//
|
||||||
|
// pack := m.Packet(i)
|
||||||
|
// conn.Write(pack.Buffer)
|
||||||
|
// bytes := make([]byte, 1024)
|
||||||
|
// n, _ := conn.Read(bytes)
|
||||||
|
// p := packet.NewPacket(bytes, n)
|
||||||
|
//
|
||||||
|
// if m.IsNoResponse(i) == true { // empty last response
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if m.Match(i, p, nil) == false {
|
||||||
|
// return false, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, nil
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func start() {
|
||||||
|
//
|
||||||
|
// rpc.SetDelegate(new(WMIProtocol))
|
||||||
|
// err := rpc.StartJSONRPC()
|
||||||
|
// if err != nil {
|
||||||
|
// log.Fatal(err)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func main() {
|
||||||
|
// start()
|
||||||
|
//}
|
@ -0,0 +1,106 @@
|
|||||||
|
package wmi_protocol_crawler_go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/client"
|
||||||
|
"git.loafle.net/overflow/of_rpc_go/models/param"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setConfig() crawler.Crawler {
|
||||||
|
|
||||||
|
r := NewWMIHeahthCrawler()
|
||||||
|
|
||||||
|
m := make(map[string]interface{}, 0)
|
||||||
|
|
||||||
|
m["ip"] = "192.168.1.1"
|
||||||
|
m["port"] = "135"
|
||||||
|
m["portType"] = "tcp"
|
||||||
|
m["ssl"] = false
|
||||||
|
|
||||||
|
r.PutConfig("r", m)
|
||||||
|
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMatch(t *testing.T) {
|
||||||
|
// test config
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
out := param.Output{}
|
||||||
|
r.Get("r", &out)
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(out.Data, &check)
|
||||||
|
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
func start() {
|
||||||
|
r := setConfig()
|
||||||
|
|
||||||
|
of_rpc.AddDelegate("r", r)
|
||||||
|
err := of_rpc.StartJSONRPC()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPC(t *testing.T) {
|
||||||
|
go start()
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
|
in := param.Input{
|
||||||
|
Name: "r",
|
||||||
|
Id: "r",
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := client.InvokeJSONRPCGet("50000", in)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var check bool
|
||||||
|
json.Unmarshal(result.Data, &check)
|
||||||
|
assert.Equal(t, true, check)
|
||||||
|
}
|
||||||
|
|
||||||
|
//package wmi_protocol_crawler
|
||||||
|
//
|
||||||
|
//import (
|
||||||
|
// "github.com/stretchr/testify/assert"
|
||||||
|
// "time"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/protocol"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/models/param"
|
||||||
|
// "git.loafle.net/overflow/of_rpc/json/client"
|
||||||
|
// "testing"
|
||||||
|
// "encoding/json"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
//func TestCheck(t *testing.T) {
|
||||||
|
// b, _ := check("192.168.1.1", 135, false)
|
||||||
|
// assert.Equal(t, true, b)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func TestRPC(t *testing.T) {
|
||||||
|
//
|
||||||
|
// go start()
|
||||||
|
// time.Sleep(time.Second * 2)
|
||||||
|
//
|
||||||
|
// p := protocol.HealthRequest{IsSSL: false}
|
||||||
|
// b, _ := json.Marshal(p)
|
||||||
|
//
|
||||||
|
// in := param.Input{Ip: "192.168.1.1", Port: 135, Data: b}
|
||||||
|
//
|
||||||
|
// re, _ := client.InvokeJSONRPC("50000", in)
|
||||||
|
// var m protocol.HealthResponse
|
||||||
|
// json.Unmarshal(re.Data, &m)
|
||||||
|
//
|
||||||
|
// assert.Equal(t, true, m.IsMatch)
|
||||||
|
//}
|
112
crawler/socket_health_crawler.go
Normal file
112
crawler/socket_health_crawler.go
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
package crawler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/matcher/packet"
|
||||||
|
"net"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/model/scaninfo"
|
||||||
|
config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SocketHeahthCrawler struct {
|
||||||
|
CrawlerImpl
|
||||||
|
m matcher.Matcher
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SocketHeahthCrawler) SetMatcher(m matcher.Matcher) {
|
||||||
|
s.m = m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SocketHeahthCrawler) getConnection(params config.Config) (net.Conn, error) {
|
||||||
|
|
||||||
|
connection := params.Target.Connection
|
||||||
|
|
||||||
|
ip := connection.Ip
|
||||||
|
port := connection.Port
|
||||||
|
portType := connection.PortType
|
||||||
|
ssl := connection.SSL
|
||||||
|
|
||||||
|
var addr string = ip
|
||||||
|
addr += ":"
|
||||||
|
addr += port
|
||||||
|
|
||||||
|
if ssl == false {
|
||||||
|
conn, err := net.Dial(portType, addr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn, nil
|
||||||
|
} else {
|
||||||
|
conn, err := tls.Dial(
|
||||||
|
portType,
|
||||||
|
addr,
|
||||||
|
&tls.Config{
|
||||||
|
InsecureSkipVerify: true,
|
||||||
|
ServerName: ip,
|
||||||
|
ClientAuth: tls.RequestClientCert,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conn, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SocketHeahthCrawler) CheckHeahth(params config.Config) (bool, error) {
|
||||||
|
conn, err := s.getConnection(params)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
connection := params.Target.Connection
|
||||||
|
info := scaninfo.NewScanInfoImpl(connection.Ip,connection.Port)
|
||||||
|
|
||||||
|
if s.m.IsPrePacket() == true {
|
||||||
|
bytes := make([]byte, 1024)
|
||||||
|
n, _ := conn.Read(bytes)
|
||||||
|
p := packet.NewPacket(bytes, n)
|
||||||
|
if s.m.Match(0, p, info) == false {
|
||||||
|
return false, nil
|
||||||
|
} else {
|
||||||
|
|
||||||
|
for i := 0; i < s.m.PacketCount(); i++ {
|
||||||
|
pack := s.m.Packet(i)
|
||||||
|
conn.Write(pack.Buffer)
|
||||||
|
bytes := make([]byte, 1024)
|
||||||
|
n, _ := conn.Read(bytes)
|
||||||
|
|
||||||
|
if s.m.IsNoResponse(i+1) == true { // empty last response
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
p := packet.NewPacket(bytes, n)
|
||||||
|
if s.m.Match(i+1, p, info) == false {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for i := 0; i < s.m.PacketCount(); i++ {
|
||||||
|
pack := s.m.Packet(i)
|
||||||
|
conn.Write(pack.Buffer)
|
||||||
|
bytes := make([]byte, 1024)
|
||||||
|
n, _ := conn.Read(bytes)
|
||||||
|
|
||||||
|
if s.m.IsNoResponse(i) == true { // empty last response
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
p := packet.NewPacket(bytes, n)
|
||||||
|
if s.m.Match(i, p, info) == false {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, nil
|
||||||
|
}
|
93
crawler/test/crawler_test.go
Normal file
93
crawler/test/crawler_test.go
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler"
|
||||||
|
"git.loafle.net/overflow/overflow_probe/crawler/health_crawler/redis_protocol_crawler_go"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"io/ioutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func initConfig() crawler.CrawlerImpl {
|
||||||
|
c := crawler.CrawlerImpl{}
|
||||||
|
c.SetInternal(redis_protocol_crawler_go.NewRedisHeahthCrawler())
|
||||||
|
|
||||||
|
b, _ := ioutil.ReadFile("./example.json")
|
||||||
|
|
||||||
|
c.Init(b)
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCrawlerInit(t *testing.T) {
|
||||||
|
|
||||||
|
c := initConfig()
|
||||||
|
m := c.GetConfig("test_id_001")
|
||||||
|
assert.Equal(t, m.Id, "test_id_001")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCrawlerAdd(t *testing.T) {
|
||||||
|
|
||||||
|
c := initConfig()
|
||||||
|
c.Remove("test_id_001")
|
||||||
|
bb, _ := ioutil.ReadFile("./example.json")
|
||||||
|
b, _ := c.Add(bb)
|
||||||
|
|
||||||
|
var ck bool
|
||||||
|
json.Unmarshal(b, &ck)
|
||||||
|
|
||||||
|
assert.Equal(t, true, ck)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCrawlerRemove(t *testing.T) {
|
||||||
|
c := initConfig()
|
||||||
|
b, _ := c.Remove("test_id_001")
|
||||||
|
|
||||||
|
var ck bool
|
||||||
|
json.Unmarshal(b, &ck)
|
||||||
|
|
||||||
|
assert.Equal(t, true, ck)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCrawlerGet(t *testing.T) {
|
||||||
|
c := initConfig()
|
||||||
|
b, _ := c.Get("test_id_001")
|
||||||
|
|
||||||
|
var ck bool
|
||||||
|
json.Unmarshal(b, &ck)
|
||||||
|
|
||||||
|
assert.Equal(t, true, ck)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFolder(t *testing.T) {
|
||||||
|
|
||||||
|
configPath := "./"
|
||||||
|
files, err := ioutil.ReadDir(configPath)
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
if file.IsDir() == true {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Log(file.Name())
|
||||||
|
//_,err := c.Add(file.Name())
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFile(t *testing.T) {
|
||||||
|
|
||||||
|
b, _ := ioutil.ReadFile("./example.json")
|
||||||
|
|
||||||
|
t.Log(string(b))
|
||||||
|
|
||||||
|
}
|
28
crawler/test/example.json
Normal file
28
crawler/test/example.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"id" : "test_id_001",
|
||||||
|
"target" : {
|
||||||
|
"connection" : {
|
||||||
|
"ip" : "192.168.1.104",
|
||||||
|
"port" : "6379",
|
||||||
|
"ssl" : false,
|
||||||
|
"portType" : "tcp"
|
||||||
|
},
|
||||||
|
"auth" : {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"schedule" : {
|
||||||
|
"interval" : "10"
|
||||||
|
},
|
||||||
|
"crawler" : {
|
||||||
|
"name":"redis_crawler",
|
||||||
|
"container":"java_proxy"
|
||||||
|
},
|
||||||
|
"items" : [
|
||||||
|
{
|
||||||
|
"type":"cpu",
|
||||||
|
"":[],
|
||||||
|
"":[],
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user