Extract the creation and Marshal of a Grab object (#256)
This allows these steps to be reusable outside of the context of the grabTarget function. https://github.com/zmap/zgrab2/pull/256
This commit is contained in:
parent
0bd36c5267
commit
351f826d8a
@ -113,6 +113,41 @@ func (target *ScanTarget) OpenUDP(flags *BaseFlags, udp *UDPFlags) (net.Conn, er
|
|||||||
return NewTimeoutConnection(nil, conn, flags.Timeout, 0, 0, flags.BytesReadLimit), nil
|
return NewTimeoutConnection(nil, conn, flags.Timeout, 0, 0, flags.BytesReadLimit), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BuildGrabFromInputResponse constructs a Grab object for a target, given the
|
||||||
|
// scan responses.
|
||||||
|
func BuildGrabFromInputResponse(t *ScanTarget, responses map[string]ScanResponse) *Grab {
|
||||||
|
var ipstr string
|
||||||
|
|
||||||
|
if t.IP != nil {
|
||||||
|
ipstr = t.IP.String()
|
||||||
|
}
|
||||||
|
return &Grab{
|
||||||
|
IP: ipstr,
|
||||||
|
Domain: t.Domain,
|
||||||
|
Data: responses,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EncodeGrab serializes a Grab to JSON, handling the debug fields if necessary.
|
||||||
|
func EncodeGrab(raw *Grab, includeDebug bool) ([]byte, error) {
|
||||||
|
var outputData interface{}
|
||||||
|
if includeDebug {
|
||||||
|
outputData = raw
|
||||||
|
} else {
|
||||||
|
// If the caller doesn't explicitly request debug data, strip it out.
|
||||||
|
// TODO: Migrate this to the ZMap fork of sheriff, once it's more
|
||||||
|
// stable.
|
||||||
|
processor := output.Processor{Verbose: false}
|
||||||
|
stripped, err := processor.Process(raw)
|
||||||
|
if err != nil {
|
||||||
|
log.Debugf("Error processing results: %v", err)
|
||||||
|
stripped = raw
|
||||||
|
}
|
||||||
|
outputData = stripped
|
||||||
|
}
|
||||||
|
return json.Marshal(outputData)
|
||||||
|
}
|
||||||
|
|
||||||
// grabTarget calls handler for each action
|
// grabTarget calls handler for each action
|
||||||
func grabTarget(input ScanTarget, m *Monitor) []byte {
|
func grabTarget(input ScanTarget, m *Monitor) []byte {
|
||||||
moduleResult := make(map[string]ScanResponse)
|
moduleResult := make(map[string]ScanResponse)
|
||||||
@ -140,32 +175,8 @@ func grabTarget(input ScanTarget, m *Monitor) []byte {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var ipstr string
|
raw := BuildGrabFromInputResponse(&input, moduleResult)
|
||||||
if input.IP == nil {
|
result, err := EncodeGrab(raw, includeDebugOutput())
|
||||||
ipstr = ""
|
|
||||||
} else {
|
|
||||||
s := input.IP.String()
|
|
||||||
ipstr = s
|
|
||||||
}
|
|
||||||
|
|
||||||
raw := Grab{IP: ipstr, Domain: input.Domain, Data: moduleResult}
|
|
||||||
|
|
||||||
var outputData interface{} = raw
|
|
||||||
|
|
||||||
if !includeDebugOutput() {
|
|
||||||
// If the caller doesn't explicitly request debug data, strip it out.
|
|
||||||
// Take advantage of the fact that we can skip the (expensive) call to
|
|
||||||
// process if debug output is included (TODO: until Process does anything else)
|
|
||||||
processor := output.Processor{Verbose: false}
|
|
||||||
stripped, err := processor.Process(raw)
|
|
||||||
if err != nil {
|
|
||||||
log.Debugf("Error processing results: %v", err)
|
|
||||||
stripped = raw
|
|
||||||
}
|
|
||||||
outputData = stripped
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err := json.Marshal(outputData)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("unable to marshal data: %s", err)
|
log.Fatalf("unable to marshal data: %s", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user