ing
This commit is contained in:
87
matcher/imap/imap.go
Normal file
87
matcher/imap/imap.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package imap
|
||||
|
||||
import (
|
||||
"git.loafle.net/overflow/overflow_discovery/match/packet"
|
||||
"git.loafle.net/overflow/overflow_discovery/model/scaninfo"
|
||||
)
|
||||
|
||||
const (
|
||||
PRE_COMPARE_STR = "* OK"
|
||||
SEND_COMPARE_STR = "* BYE"
|
||||
)
|
||||
|
||||
type IMAPMatcher struct {
|
||||
sendPackets []*packet.Packet
|
||||
}
|
||||
|
||||
func (i *IMAPMatcher) Match(index int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
|
||||
|
||||
switch index {
|
||||
case 0:
|
||||
|
||||
recvStr := string(packet.Buffer)
|
||||
|
||||
if len(recvStr) < 3 {
|
||||
return false
|
||||
}
|
||||
|
||||
compareStr := recvStr[0:4]
|
||||
|
||||
if compareStr == PRE_COMPARE_STR {
|
||||
return true
|
||||
}
|
||||
|
||||
case 1:
|
||||
|
||||
recvStr := string(packet.Buffer)
|
||||
|
||||
if len(recvStr) < 5 {
|
||||
return false
|
||||
}
|
||||
|
||||
compareStr := recvStr[0:5]
|
||||
|
||||
if compareStr == SEND_COMPARE_STR {
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (i *IMAPMatcher) PacketCount() int {
|
||||
return len(i.sendPackets)
|
||||
}
|
||||
func (i *IMAPMatcher) Packet(index int) *packet.Packet {
|
||||
return i.sendPackets[index]
|
||||
}
|
||||
func (i *IMAPMatcher) ServiceName() string {
|
||||
return "IMAP"
|
||||
}
|
||||
|
||||
func (i *IMAPMatcher) IsError(index int, packet *packet.Packet, info scaninfo.ServiceScanInfo) bool {
|
||||
return false
|
||||
}
|
||||
func (i *IMAPMatcher) HasResponse(index int) bool {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (i *IMAPMatcher) IsPrePacket() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func NewIMAPMatcher() *IMAPMatcher {
|
||||
|
||||
im := IMAPMatcher{}
|
||||
|
||||
reqStr := "A0001 LOGOUT\r\n"
|
||||
byte := make([]byte, len(reqStr))
|
||||
copy(byte[:], reqStr)
|
||||
|
||||
im.sendPackets = append(im.sendPackets, packet.NewPacket(byte, len(reqStr)))
|
||||
|
||||
return &im
|
||||
|
||||
}
|
||||
153
matcher/imap/imap_test.go
Normal file
153
matcher/imap/imap_test.go
Normal file
@@ -0,0 +1,153 @@
|
||||
package imap
|
||||
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
//"git.loafle.net/overflow/overflow_discovery/collector/core/scan/port"
|
||||
"git.loafle.net/overflow/overflow_discovery/match/packet"
|
||||
//"git.loafle.net/overflow/overflow_discovery/collector/core/scan/service/matcher/scaninfo"
|
||||
//"git.loafle.net/overflow/overflow_discovery/collector/discovery/types"
|
||||
"net"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func ImapRun(client net.Conn, t *testing.T) {
|
||||
|
||||
lm := NewIMAPMatcher()
|
||||
|
||||
//port := types.NewPort("143", types.NewHost("192.168.1.215"), types.TYPE_TCP)
|
||||
//
|
||||
//scanInfo := types.NewServiceScanInfo(port)
|
||||
//
|
||||
//var ipport string
|
||||
//ipport = port.Host.Ip + ":" + string(port.Port)
|
||||
//
|
||||
//fmt.Println(ipport)
|
||||
//client, _ := net.Dial("tcp", ipport)
|
||||
|
||||
//defer client.Close()
|
||||
|
||||
bytett := make([]byte, 1024)
|
||||
|
||||
rr, _ := client.Read(bytett)
|
||||
|
||||
bb := lm.Match(0, packet.NewPacket(bytett, rr), nil)
|
||||
|
||||
if bb {
|
||||
t.Log("good!")
|
||||
}
|
||||
|
||||
fmt.Println(lm.PacketCount())
|
||||
|
||||
for ii := 0; ii < lm.PacketCount(); ii++ {
|
||||
|
||||
pack := lm.Packet(ii)
|
||||
|
||||
//fmt.Println(pack)
|
||||
|
||||
client.Write(pack.Buffer)
|
||||
|
||||
bytes := make([]byte, 1024)
|
||||
|
||||
read, _ := client.Read(bytes)
|
||||
|
||||
fmt.Println(cap(bytes))
|
||||
|
||||
//fmt.Println(bytes)
|
||||
|
||||
b := lm.Match(ii+1, packet.NewPacket(bytes, read), nil)
|
||||
|
||||
if b {
|
||||
t.Log("send Good!")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
func TestIMapTls(t *testing.T) {
|
||||
|
||||
conn, _ := tls.Dial(
|
||||
"tcp",
|
||||
"192.168.1.15:993",
|
||||
&tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
ServerName: "192.168.1.15",
|
||||
},
|
||||
)
|
||||
|
||||
defer conn.Close()
|
||||
|
||||
ImapRun(conn, t)
|
||||
|
||||
}
|
||||
|
||||
func TestIMapNormal(t *testing.T) {
|
||||
|
||||
client, err := net.Dial("tcp", "192.168.1.15:143")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
defer client.Close()
|
||||
|
||||
ImapRun(client, t)
|
||||
|
||||
}
|
||||
|
||||
func TestImap(t *testing.T) {
|
||||
|
||||
lm := NewIMAPMatcher()
|
||||
|
||||
//port := types.NewPort("143", types.NewHost("192.168.1.215"), types.TYPE_TCP)
|
||||
|
||||
//scanInfo := scaninfo.NewServiceScanInfo(port)
|
||||
|
||||
var ipport string
|
||||
//ipport = port.Host.Ip + ":" + port.Port_
|
||||
|
||||
fmt.Println(ipport)
|
||||
client, _ := net.Dial("tcp", ipport)
|
||||
|
||||
defer client.Close()
|
||||
|
||||
bytett := make([]byte, 1024)
|
||||
|
||||
rr, _ := client.Read(bytett)
|
||||
|
||||
//bb := lm.Match(0, packet.NewPacket(bytett, rr), scanInfo)
|
||||
bb := lm.Match(0, packet.NewPacket(bytett, rr), nil)
|
||||
|
||||
if bb {
|
||||
t.Log("good!")
|
||||
}
|
||||
|
||||
fmt.Println(lm.PacketCount())
|
||||
|
||||
for ii := 0; ii < lm.PacketCount(); ii++ {
|
||||
|
||||
pack := lm.Packet(ii)
|
||||
|
||||
//fmt.Println(pack)
|
||||
|
||||
client.Write(pack.Buffer)
|
||||
|
||||
bytes := make([]byte, 1024)
|
||||
|
||||
read, _ := client.Read(bytes)
|
||||
|
||||
fmt.Println(cap(bytes))
|
||||
|
||||
//fmt.Println(bytes)
|
||||
|
||||
b := lm.Match(ii+1, packet.NewPacket(bytes, read), nil)
|
||||
|
||||
if b {
|
||||
t.Log("send Good!")
|
||||
}
|
||||
|
||||
}
|
||||
//t.Log(scanInfo)
|
||||
}
|
||||
Reference in New Issue
Block a user