fixed discovery

This commit is contained in:
snoop
2017-08-09 18:02:40 +09:00
parent 4913cff255
commit 919cc9faa7
11 changed files with 139 additions and 92 deletions

View File

@@ -38,7 +38,7 @@ func Scan(host *types.DiscoveryHost, tcpCB tcpRecvCallback) {
Send(host, nil)
time.Sleep(time.Second * 3)
time.Sleep(time.Second * 20)
//communicate.Send(events.NewEvent(events.CENTRAL_EVENT, events.NewPortEndEvent(host.Zone.CidrInt64(), host.Ip, host.Histories, types.TYPE_TCP)))

View File

@@ -5,9 +5,10 @@ import (
"git.loafle.net/overflow/overflow_probe/matcher"
"git.loafle.net/overflow/overflow_probe/matcher/packet"
log "github.com/cihub/seelog"
"git.loafle.net/overflow/overflow_probe/model/scaninfo"
)
func processPostPacket(mats []matcher.Matcher, info *types.ServiceScanInfo, m ConnFactory) bool {
func processPostPacket(mats []matcher.Matcher, info scaninfo.ServiceScanInfo, m ConnFactory) bool {
var ser *types.DiscoveryService = nil
var curMatcher matcher.Matcher = nil
@@ -15,10 +16,11 @@ func processPostPacket(mats []matcher.Matcher, info *types.ServiceScanInfo, m Co
for i := 0; i < len(mats); i++ {
info.History = make([]*types.ServiceScanHistory, 0)
conn, err := m.createSocket(info.Port.Host.Ip_, info.Port.Port_)
//info.History = make([]*types.ServiceScanHistory, 0)
//conn, err := m.createSocket(info.Port.Host.Ip_, info.Port.Port_)
conn, err := m.createSocket(info.GetIP(), info.GetPort())
if err != nil {
log.Error(m.Type() + " process postpacket create socket error :" + info.Port.Host.Ip_ + " port: " + info.Port.Port_ + " error: " + err.Error())
log.Error(m.Type() + " process postpacket create socket error :" + info.GetIP() + " port: " + info.GetPort() + " error: " + err.Error())
break
}
curMatcher = mats[i]
@@ -33,20 +35,26 @@ func processPostPacket(mats []matcher.Matcher, info *types.ServiceScanInfo, m Co
if l != p.Len {
break
}
AddServiceScanHistory(
&info.History,
types.NewServiceScanHistory(info.Port, curMatcher.ServiceName(), types.DIRECTION_SEND, p.Buffer))
//AddServiceScanHistory(
// &info.History,
// types.NewServiceScanHistory(info.Port, curMatcher.ServiceName(), types.DIRECTION_SEND, p.Buffer))
//AddServiceScanHistory(info, curMatcher.ServiceName(), types.DIRECTION_SEND, p.Buffer)
info.SetHistory(types.NewServiceScanHistory(info.GetDiscoveryPort(), curMatcher.ServiceName(), types.DIRECTION_SEND, p.Buffer))
buf := make([]byte, 1024)
l, err = conn.Read(buf)
AddServiceScanHistory(
&info.History,
types.NewServiceScanHistory(info.Port, curMatcher.ServiceName(), types.DIRECTION_RECV, p.Buffer))
//AddServiceScanHistory(
// &info.History,
// types.NewServiceScanHistory(info.Port, curMatcher.ServiceName(), types.DIRECTION_RECV, p.Buffer))
//AddServiceScanHistory(info, curMatcher.ServiceName(), types.DIRECTION_SEND, buf)
info.SetHistory(types.NewServiceScanHistory(info.GetDiscoveryPort(), curMatcher.ServiceName(), types.DIRECTION_RECV, buf))
if err != nil {
if curMatcher.IsNoResponse(indexI) == true {
ser = types.NewService(m.Type(), curMatcher.ServiceName(), info.Port)
ser = types.NewService(m.Type(), curMatcher.ServiceName(), info.GetDiscoveryPort())
isFound = true
break
}
@@ -56,7 +64,7 @@ func processPostPacket(mats []matcher.Matcher, info *types.ServiceScanInfo, m Co
if curMatcher.Match(indexI, packet.NewPacket(buf, l), info) == true {
if indexI == (curMatcher.PacketCount() - 1) {
ser = types.NewService(m.Type(), curMatcher.ServiceName(), info.Port)
ser = types.NewService(m.Type(), curMatcher.ServiceName(), info.GetDiscoveryPort())
break
}
isFound = true

View File

@@ -5,9 +5,10 @@ import (
"git.loafle.net/overflow/overflow_probe/matcher"
"git.loafle.net/overflow/overflow_probe/matcher/packet"
"net"
"git.loafle.net/overflow/overflow_probe/model/scaninfo"
)
func processPrePacket(conn net.Conn, prepacket *packet.Packet, mats []matcher.Matcher, info *types.ServiceScanInfo, m ConnFactory) bool {
func processPrePacket(conn net.Conn, prepacket *packet.Packet, mats []matcher.Matcher, info scaninfo.ServiceScanInfo, m ConnFactory) bool {
defer conn.Close()
@@ -15,16 +16,18 @@ func processPrePacket(conn net.Conn, prepacket *packet.Packet, mats []matcher.Ma
var ser *types.DiscoveryService = nil
for i := 0; i < len(mats); i++ {
info.History = make([]*types.ServiceScanHistory, 0)
//info.History = make([]*types.ServiceScanHistory, 0)
AddServiceScanHistory(
&info.History,
types.NewServiceScanHistory(info.Port, mats[i].ServiceName(), types.DIRECTION_RECV, prepacket.Buffer))
//AddServiceScanHistory(
// &info.History,
// types.NewServiceScanHistory(info.Port, mats[i].ServiceName(), types.DIRECTION_RECV, prepacket.Buffer))
info.SetHistory(types.NewServiceScanHistory(info.GetDiscoveryPort(), mats[i].ServiceName(), types.DIRECTION_RECV, prepacket.Buffer))
if mats[i].Match(0, prepacket, info) == true {
packetCount := mats[i].PacketCount()
if packetCount == 0 {
ser = types.NewService(m.Type(), mats[i].ServiceName(), info.Port)
ser = types.NewService(m.Type(), mats[i].ServiceName(), info.GetDiscoveryPort())
break
}
isFound = false
@@ -39,9 +42,10 @@ func processPrePacket(conn net.Conn, prepacket *packet.Packet, mats []matcher.Ma
if l != p.Len {
break
}
AddServiceScanHistory(
&info.History,
types.NewServiceScanHistory(info.Port, mats[i].ServiceName(), types.DIRECTION_SEND, p.Buffer))
//AddServiceScanHistory(
// &info.History,
// types.NewServiceScanHistory(info.Port, mats[i].ServiceName(), types.DIRECTION_SEND, p.Buffer))
info.SetHistory(types.NewServiceScanHistory(info.GetDiscoveryPort(), mats[i].ServiceName(), types.DIRECTION_SEND, p.Buffer))
buffer := make([]byte, 1024)
l, err = conn.Read(buffer)
@@ -49,9 +53,10 @@ func processPrePacket(conn net.Conn, prepacket *packet.Packet, mats []matcher.Ma
break
}
AddServiceScanHistory(
&info.History,
types.NewServiceScanHistory(info.Port, mats[i].ServiceName(), types.DIRECTION_RECV, buffer))
//AddServiceScanHistory(
// &info.History,
// types.NewServiceScanHistory(info.Port, mats[i].ServiceName(), types.DIRECTION_RECV, buffer))
info.SetHistory(types.NewServiceScanHistory(info.GetDiscoveryPort(), mats[i].ServiceName(), types.DIRECTION_RECV, buffer))
if mats[i].Match(j+1, packet.NewPacket(buffer, l), info) == true {
isFound = true
@@ -61,7 +66,7 @@ func processPrePacket(conn net.Conn, prepacket *packet.Packet, mats []matcher.Ma
}
}
if isFound == true {
ser = types.NewService(m.Type(), mats[i].ServiceName(), info.Port)
ser = types.NewService(m.Type(), mats[i].ServiceName(), info.GetDiscoveryPort())
break
}
}

View File

@@ -14,6 +14,7 @@ import (
"net"
"strconv"
"strings"
"git.loafle.net/overflow/overflow_probe/model/scaninfo"
)
func Scan(dp *types.DiscoveryPort) {
@@ -24,7 +25,7 @@ func Scan(dp *types.DiscoveryPort) {
ConnFactoryNormal{t: types.TYPE_TCP},
ConnFactoryTLS{t: types.TYPE_TLS},
}
info := types.NewServiceScanInfo(dp)
info := scaninfo.NewScanInfoImpl(dp)
for i := 0; i < len(factories); i++ {
m := factories[i]
@@ -125,7 +126,7 @@ func MatchUDPPacket(zone *types.DiscoveryZone, ipString, portString string, udpL
port := types.NewPort(portString, host, types.TYPE_UDP)
mats := matcher.GetUdpMatchers()
info := types.NewServiceScanInfo(port)
info := scaninfo.NewScanInfoImpl(port)
for i := 0; i < len(mats); i++ {
matcher := mats[i]
@@ -135,18 +136,18 @@ func MatchUDPPacket(zone *types.DiscoveryZone, ipString, portString string, udpL
key := portString + ":" + types.TYPE_UDP
host.SetPort(key, port)
ser := types.NewService(types.TYPE_UDP, matcher.ServiceName(), info.Port)
ser := types.NewService(types.TYPE_UDP, matcher.ServiceName(), info.GetDiscoveryPort())
AddService(ser, info)
}
}
}
func AddService(ds *types.DiscoveryService, info *types.ServiceScanInfo) {
port := info.Port
func AddService(ds *types.DiscoveryService, info scaninfo.ServiceScanInfo) {
port := info.GetDiscoveryPort()
var serviceName string
if ds != nil {
port.Services = append(port.Services, ds)
port.SetHistory(info.History)
port.SetHistory(info.GetHistories())
serviceName = ds.ServiceName
log.Debugf("%s, %s:%s, Service was found : %s ", ds.PortType, port.Host.Ip_, port.Port_, ds.ServiceName)
} else {
@@ -160,11 +161,18 @@ func AddService(ds *types.DiscoveryService, info *types.ServiceScanInfo) {
sendEvent(info, serviceName)
}
func AddServiceScanHistory(histories *[]*types.ServiceScanHistory, h *types.ServiceScanHistory) {
*histories = append(*histories, h)
}
//func AddServiceScanHistory(histories *[]*types.ServiceScanHistory, h *types.ServiceScanHistory) {
// *histories = append(*histories, h)
//}
func sendEvent(info *types.ServiceScanInfo, serviceName string) {
//func AddServiceScanHistory(info scaninfo.ServiceScanInfo, serviceName string, direction string, packet []byte) {
// //*histories = append(*histories, h)
// history := info.GetIP() + ":" +info.GetPort()+ "-" + serviceName + "[" + direction + "]" + "[" + "Packet" + "]"
//
// //info.SetHistory(history)
//}
func sendEvent( info scaninfo.ServiceScanInfo, serviceName string) {
//communicate.Send(
// events.NewEvent(