From d9337eeb38985a323dcb12a7bd60b83e04f7fd12 Mon Sep 17 00:00:00 2001 From: MaineK00n Date: Wed, 14 Oct 2020 14:53:30 +0900 Subject: [PATCH] change parse to models.ListenPorts from string --- scan/base.go | 8 ++++++++ scan/base_test.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ scan/debian.go | 4 ++-- scan/redhatbase.go | 4 ++-- 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/scan/base.go b/scan/base.go index 9b109b3a..d18aa031 100644 --- a/scan/base.go +++ b/scan/base.go @@ -809,3 +809,11 @@ func (l *base) parseLsOf(stdout string) map[string]string { } return portPid } + +func (l *base) parseListenPorts(port string) models.ListenPorts { + sep := strings.LastIndex(port, ":") + if sep == -1 { + return models.ListenPorts{} + } + return models.ListenPorts{Address: port[:sep], Port: port[sep+1:]} +} diff --git a/scan/base_test.go b/scan/base_test.go index 01934873..07624183 100644 --- a/scan/base_test.go +++ b/scan/base_test.go @@ -12,6 +12,7 @@ import ( _ "github.com/aquasecurity/fanal/analyzer/library/poetry" _ "github.com/aquasecurity/fanal/analyzer/library/yarn" "github.com/future-architect/vuls/config" + "github.com/future-architect/vuls/models" ) func TestParseDockerPs(t *testing.T) { @@ -275,3 +276,47 @@ docker-pr 9135 root 4u IPv6 297133 0t0 TCP *:6379 (LISTEN) }) } } + +func Test_base_parseListenPorts(t *testing.T) { + tests := []struct { + name string + args string + expect models.ListenPorts + }{{ + name: "empty", + args: "", + expect: models.ListenPorts{ + Address: "", + Port: "", + }, + }, { + name: "normal", + args: "127.0.0.1:22", + expect: models.ListenPorts{ + Address: "127.0.0.1", + Port: "22", + }, + }, { + name: "asterisk", + args: "*:22", + expect: models.ListenPorts{ + Address: "*", + Port: "22", + }, + }, { + name: "ipv6_loopback", + args: "[::1]:22", + expect: models.ListenPorts{ + Address: "[::1]", + Port: "22", + }, + }} + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + l := &base{} + if listenPort := l.parseListenPorts(tt.args); !reflect.DeepEqual(listenPort, tt.expect) { + t.Errorf("base.parseListenPorts() = %v, want %v", listenPort, tt.expect) + } + }) + } +} diff --git a/scan/debian.go b/scan/debian.go index 92e7db08..ee846f89 100644 --- a/scan/debian.go +++ b/scan/debian.go @@ -1294,14 +1294,14 @@ func (o *debian) dpkgPs() error { pidLoadedFiles[pid] = append(pidLoadedFiles[pid], ss...) } - pidListenPorts := map[string][]string{} + pidListenPorts := map[string][]models.ListenPorts{} stdout, err = o.lsOfListen() if err != nil { return xerrors.Errorf("Failed to ls of: %w", err) } portPid := o.parseLsOf(stdout) for port, pid := range portPid { - pidListenPorts[pid] = append(pidListenPorts[pid], port) + pidListenPorts[pid] = append(pidListenPorts[pid], o.parseListenPorts(port)) } for pid, loadedFiles := range pidLoadedFiles { diff --git a/scan/redhatbase.go b/scan/redhatbase.go index 2cc270f1..24fc4e30 100644 --- a/scan/redhatbase.go +++ b/scan/redhatbase.go @@ -491,14 +491,14 @@ func (o *redhatBase) yumPs() error { pidLoadedFiles[pid] = append(pidLoadedFiles[pid], ss...) } - pidListenPorts := map[string][]string{} + pidListenPorts := map[string][]models.ListenPorts{} stdout, err = o.lsOfListen() if err != nil { return xerrors.Errorf("Failed to ls of: %w", err) } portPid := o.parseLsOf(stdout) for port, pid := range portPid { - pidListenPorts[pid] = append(pidListenPorts[pid], port) + pidListenPorts[pid] = append(pidListenPorts[pid], o.parseListenPorts(port)) } for pid, loadedFiles := range pidLoadedFiles {