Skip to content

Commit 25ce63b

Browse files
Merge pull request #1651 from projectdiscovery/dev
release naabu v2.5.0
2 parents f9612c8 + 4efe815 commit 25ce63b

File tree

11 files changed

+101
-89
lines changed

11 files changed

+101
-89
lines changed

.github/workflows/dockerhub-push.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ jobs:
2020
curl --silent "https://api.github.com/repos/projectdiscovery/naabu/releases/latest" | jq -r .tag_name | xargs -I {} echo TAG={} >> $GITHUB_OUTPUT
2121
2222
- name: Set up QEMU
23-
uses: docker/setup-qemu-action@v3
23+
uses: docker/setup-qemu-action@v4
2424

2525
- name: Set up Docker Buildx
26-
uses: docker/setup-buildx-action@v3
26+
uses: docker/setup-buildx-action@v4
2727

2828
- name: Login to DockerHub
29-
uses: docker/login-action@v3
29+
uses: docker/login-action@v4
3030
with:
3131
username: ${{ secrets.DOCKER_USERNAME }}
3232
password: ${{ secrets.DOCKER_TOKEN }}
3333

3434
- name: Build and push
35-
uses: docker/build-push-action@v6
35+
uses: docker/build-push-action@v7
3636
with:
3737
context: .
3838
platforms: linux/amd64,linux/arm64,linux/arm

.github/workflows/release-binary.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
- name: Install Dependences
1717
run: brew install libpcap
1818
- name: Run GoReleaser
19-
uses: goreleaser/goreleaser-action@v6
19+
uses: goreleaser/goreleaser-action@v7
2020
with:
2121
version: latest
2222
args: release -f .goreleaser/mac.yml --clean
@@ -38,7 +38,7 @@ jobs:
3838
run: sudo apt install libpcap-dev
3939

4040
- name: Run GoReleaser
41-
uses: goreleaser/goreleaser-action@v6
41+
uses: goreleaser/goreleaser-action@v7
4242
with:
4343
version: latest
4444
args: release -f .goreleaser/linux-amd64.yml --clean
@@ -63,7 +63,7 @@ jobs:
6363
run: sudo apt install libpcap-dev
6464

6565
- name: Run GoReleaser
66-
uses: goreleaser/goreleaser-action@v6
66+
uses: goreleaser/goreleaser-action@v7
6767
with:
6868
version: latest
6969
args: release -f .goreleaser/linux-arm64.yml --clean
@@ -82,7 +82,7 @@ jobs:
8282
with:
8383
go-version: 1.24.x
8484
- name: Run GoReleaser
85-
uses: goreleaser/goreleaser-action@v6
85+
uses: goreleaser/goreleaser-action@v7
8686
with:
8787
version: latest
8888
args: release -f .goreleaser/windows.yml --clean

.github/workflows/release-test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
run: brew install libpcap
2020

2121
- name: release test
22-
uses: goreleaser/goreleaser-action@v6
22+
uses: goreleaser/goreleaser-action@v7
2323
with:
2424
args: "release --clean --snapshot -f .goreleaser/mac.yml"
2525
version: latest
@@ -34,7 +34,7 @@ jobs:
3434
run: sudo apt install libpcap-dev
3535

3636
- name: release test
37-
uses: goreleaser/goreleaser-action@v6
37+
uses: goreleaser/goreleaser-action@v7
3838
with:
3939
args: "release --clean --snapshot -f .goreleaser/linux.yml"
4040
version: latest
@@ -46,7 +46,7 @@ jobs:
4646
- uses: projectdiscovery/actions/setup/go@v1
4747

4848
- name: release test
49-
uses: goreleaser/goreleaser-action@v6
49+
uses: goreleaser/goreleaser-action@v7
5050
with:
5151
args: "release --clean --snapshot -f .goreleaser/windows.yml"
5252
version: latest

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Build
2-
FROM golang:1.25.5-alpine AS build-env
2+
FROM golang:1.26.1-alpine AS build-env
33
RUN apk add --no-cache build-base libpcap-dev
44
WORKDIR /app
55
COPY . /app
66
RUN go mod download
77
RUN go build ./cmd/naabu
88

99
# Release
10-
FROM alpine:3.23.2
10+
FROM alpine:3.23.3
1111
RUN apk upgrade --no-cache \
1212
&& apk add --no-cache nmap libpcap-dev bind-tools ca-certificates nmap-scripts
1313
COPY --from=build-env /app/naabu /usr/local/bin/

go.mod

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ require (
1212
github.com/miekg/dns v1.1.62
1313
github.com/pkg/errors v0.9.1
1414
github.com/projectdiscovery/blackrock v0.0.1
15-
github.com/projectdiscovery/cdncheck v1.2.19
15+
github.com/projectdiscovery/cdncheck v1.2.26
1616
github.com/projectdiscovery/clistats v0.1.1
1717
github.com/projectdiscovery/dnsx v1.2.3
1818
github.com/projectdiscovery/fdmax v0.0.4
1919
github.com/projectdiscovery/freeport v0.0.7
2020
github.com/projectdiscovery/goflags v0.1.74
21-
github.com/projectdiscovery/gologger v1.1.67
21+
github.com/projectdiscovery/gologger v1.1.68
2222
github.com/projectdiscovery/ipranger v0.0.53
2323
github.com/projectdiscovery/mapcidr v1.1.97
24-
github.com/projectdiscovery/networkpolicy v0.1.33
24+
github.com/projectdiscovery/networkpolicy v0.1.34
2525
github.com/projectdiscovery/ratelimit v0.0.83
26-
github.com/projectdiscovery/retryablehttp-go v1.3.4
26+
github.com/projectdiscovery/retryablehttp-go v1.3.6
2727
github.com/projectdiscovery/uncover v1.2.0
2828
github.com/projectdiscovery/utils v0.9.0
2929
github.com/remeh/sizedwaitgroup v1.0.0
@@ -52,7 +52,6 @@ require (
5252
github.com/charmbracelet/lipgloss v0.13.0 // indirect
5353
github.com/charmbracelet/x/ansi v0.3.2 // indirect
5454
github.com/cheggaaa/pb/v3 v3.1.4 // indirect
55-
github.com/cloudflare/circl v1.6.1 // indirect
5655
github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 // indirect
5756
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
5857
github.com/dimchansky/utfbom v1.1.1 // indirect
@@ -93,11 +92,11 @@ require (
9392
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
9493
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
9594
github.com/projectdiscovery/asnmap v1.1.1 // indirect
96-
github.com/projectdiscovery/fastdialer v0.5.3 // indirect
97-
github.com/projectdiscovery/hmap v0.0.99 // indirect
95+
github.com/projectdiscovery/fastdialer v0.5.4 // indirect
96+
github.com/projectdiscovery/hmap v0.0.100 // indirect
9897
github.com/projectdiscovery/machineid v0.0.0-20250715113114-c77eb3567582 // indirect
99-
github.com/projectdiscovery/retryabledns v1.0.112 // indirect
100-
github.com/refraction-networking/utls v1.7.1 // indirect
98+
github.com/projectdiscovery/retryabledns v1.0.113 // indirect
99+
github.com/refraction-networking/utls v1.8.2 // indirect
101100
github.com/rivo/uniseg v0.4.7 // indirect
102101
github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect
103102
github.com/shirou/gopsutil/v3 v3.23.7 // indirect

go.sum

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
8080
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
8181
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
8282
github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I=
83-
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
84-
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
8583
github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 h1:ox2F0PSMlrAAiAdknSRMDrAr8mfxPCfSZolH+/qQnyQ=
8684
github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4=
8785
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -258,45 +256,45 @@ github.com/projectdiscovery/asnmap v1.1.1 h1:ImJiKIaACOT7HPx4Pabb5dksolzaFYsD1kI
258256
github.com/projectdiscovery/asnmap v1.1.1/go.mod h1:QT7jt9nQanj+Ucjr9BqGr1Q2veCCKSAVyUzLXfEcQ60=
259257
github.com/projectdiscovery/blackrock v0.0.1 h1:lHQqhaaEFjgf5WkuItbpeCZv2DUIE45k0VbGJyft6LQ=
260258
github.com/projectdiscovery/blackrock v0.0.1/go.mod h1:ANUtjDfaVrqB453bzToU+YB4cUbvBRpLvEwoWIwlTss=
261-
github.com/projectdiscovery/cdncheck v1.2.19 h1:UU0ii1z8WZFsFODD89MYJ4i9h1EXhBJSZt/rzIH94JY=
262-
github.com/projectdiscovery/cdncheck v1.2.19/go.mod h1:RRA4KOiUTBhkk2tImdoxqPpD0fB5C9rBP7W0r+ji9Cg=
259+
github.com/projectdiscovery/cdncheck v1.2.26 h1:0iLVppSfXDHWu/jPlDJGTsyX+qziQgO34qjctkXfGyc=
260+
github.com/projectdiscovery/cdncheck v1.2.26/go.mod h1:Y1KQmACY+AifbuPX/W7o8lWssiWmAZ5d/KG8qkmFm9I=
263261
github.com/projectdiscovery/clistats v0.1.1 h1:8mwbdbwTU4aT88TJvwIzTpiNeow3XnAB72JIg66c8wE=
264262
github.com/projectdiscovery/clistats v0.1.1/go.mod h1:4LtTC9Oy//RiuT1+76MfTg8Hqs7FQp1JIGBM3nHK6a0=
265263
github.com/projectdiscovery/dnsx v1.2.3 h1:S87U9kYuuqqvMFyen8mZQy1FMuR5EGCsXHqfHPQAeuc=
266264
github.com/projectdiscovery/dnsx v1.2.3/go.mod h1:NjAEyJt6+meNqZqnYHL4ZPxXfysuva+et56Eq/e1cVE=
267-
github.com/projectdiscovery/fastdialer v0.5.3 h1:Io57Q37ouFzrPK53ZdzK6jsELgqjIMCWcoDs+lRDGMA=
268-
github.com/projectdiscovery/fastdialer v0.5.3/go.mod h1:euoxS1E93LDnl0OnNN0UALedAFF+EehBxyU3z+79l0g=
265+
github.com/projectdiscovery/fastdialer v0.5.4 h1:+0oesDDqZcIPE5bNDmm/Xm9Xm3yjnhl4xwP+h5D1TE4=
266+
github.com/projectdiscovery/fastdialer v0.5.4/go.mod h1:KCzt6WnSAj9umiUBRCaC0EJSEyeshxDoowfwjxodmQw=
269267
github.com/projectdiscovery/fdmax v0.0.4 h1:K9tIl5MUZrEMzjvwn/G4drsHms2aufTn1xUdeVcmhmc=
270268
github.com/projectdiscovery/fdmax v0.0.4/go.mod h1:oZLqbhMuJ5FmcoaalOm31B1P4Vka/CqP50nWjgtSz+I=
271269
github.com/projectdiscovery/freeport v0.0.7 h1:Q6uXo/j8SaV/GlAHkEYQi8WQoPXyJWxyspx+aFmz9Qk=
272270
github.com/projectdiscovery/freeport v0.0.7/go.mod h1:cOhWKvNBe9xM6dFJ3RrrLvJ5vXx2NQ36SecuwjenV2k=
273271
github.com/projectdiscovery/goflags v0.1.74 h1:n85uTRj5qMosm0PFBfsvOL24I7TdWRcWq/1GynhXS7c=
274272
github.com/projectdiscovery/goflags v0.1.74/go.mod h1:UMc9/7dFz2oln+10tv6cy+7WZKTHf9UGhaNkF95emh4=
275-
github.com/projectdiscovery/gologger v1.1.67 h1:GZU3AjYiJvcwJT5TlfIv+152/TVmaz62Zyn3/wWXlig=
276-
github.com/projectdiscovery/gologger v1.1.67/go.mod h1:35oeQP6wvj58S+o+Km6boED/t786FXQkI0exhFHJbNE=
277-
github.com/projectdiscovery/hmap v0.0.99 h1:XPfLnD3CUrMqVCIdpK9ozD7Xmp3simx3T+2j4WWhHnU=
278-
github.com/projectdiscovery/hmap v0.0.99/go.mod h1:koyUJi83K5G3w35ZLFXOYZIyYJsO+6hQrgDDN1RBrVE=
273+
github.com/projectdiscovery/gologger v1.1.68 h1:KfdIO/3X7BtHssWZuqhxPZ+A946epCCx2cz+3NnRAnU=
274+
github.com/projectdiscovery/gologger v1.1.68/go.mod h1:Xae0t4SeqJVa0RQGK9iECx/+HfXhvq70nqOQp2BuW+o=
275+
github.com/projectdiscovery/hmap v0.0.100 h1:DBZ3Req9lWf4P1YC9PRa4eiMvLY0Uxud43NRBcocPfs=
276+
github.com/projectdiscovery/hmap v0.0.100/go.mod h1:2O06pR8pHOP9wSmxAoxuM45U7E+UqOqOdlSIeddM0bA=
279277
github.com/projectdiscovery/ipranger v0.0.53 h1:gb4yEqtC2MJl1tSdx/ycao1A1wl7sHqjHeifZidO3Z4=
280278
github.com/projectdiscovery/ipranger v0.0.53/go.mod h1:r6R0DFKQRo4QR2zjZXqLRCp0ovbco8F/NmOI+pK4db8=
281279
github.com/projectdiscovery/machineid v0.0.0-20250715113114-c77eb3567582 h1:eR+0HE//Ciyfwy3HC7fjRyKShSJHYoX2Pv7pPshjK/Q=
282280
github.com/projectdiscovery/machineid v0.0.0-20250715113114-c77eb3567582/go.mod h1:3G3BRKui7nMuDFAZKR/M2hiOLtaOmyukT20g88qRQjI=
283281
github.com/projectdiscovery/mapcidr v1.1.97 h1:7FkxNNVXp+m1rIu5Nv/2SrF9k4+LwP8QuWs2puwy+2w=
284282
github.com/projectdiscovery/mapcidr v1.1.97/go.mod h1:9dgTJh1SP02gYZdpzMjm6vtYFkEHQHoTyaVNvaeJ7lA=
285-
github.com/projectdiscovery/networkpolicy v0.1.33 h1:bVgp+XpLEsQ7ZEJt3UaUqIwhI01MMdt7F2dfIKFQg/w=
286-
github.com/projectdiscovery/networkpolicy v0.1.33/go.mod h1:YAPddAXUc/lhoU85AFdvgOQKx8Qh8r0vzSjexRWk6Yk=
283+
github.com/projectdiscovery/networkpolicy v0.1.34 h1:TRwNbgMwdx3NC190TKSLwtTvr0JAIZAlnWkOhW0yBME=
284+
github.com/projectdiscovery/networkpolicy v0.1.34/go.mod h1:GJ20E7fJoA2vk8ZBSa1Cvc5WyP8RxglF5bZmYgK8jag=
287285
github.com/projectdiscovery/ratelimit v0.0.83 h1:hfb36QvznBrjA4FNfpFE8AYRVBYrfJh8qHVROLQgl54=
288286
github.com/projectdiscovery/ratelimit v0.0.83/go.mod h1:z076BrLkBb5yS7uhHNoCTf8X/BvFSGRxwQ8EzEL9afM=
289-
github.com/projectdiscovery/retryabledns v1.0.112 h1:4iCiuo6jMnw/pdOZRzBQrbUOUu5tOeuvGupxVV8RDLw=
290-
github.com/projectdiscovery/retryabledns v1.0.112/go.mod h1:xsJTKbo+KGqd7+88z1naEUFJybLH2yjB/zUyOweA7k0=
291-
github.com/projectdiscovery/retryablehttp-go v1.3.4 h1:QgGah0Py9MvvjrzGxGthgzhh5jzG18uRfqkJNUXKDIo=
292-
github.com/projectdiscovery/retryablehttp-go v1.3.4/go.mod h1:4disixzHEhNd2pEO2kpg0kqyy9Tx1WMZtgd7hI/XiuM=
287+
github.com/projectdiscovery/retryabledns v1.0.113 h1:s+DAzdJ8XhLxRgt5636H0HG9OqHsGRjX9wTrLSTMqlQ=
288+
github.com/projectdiscovery/retryabledns v1.0.113/go.mod h1:+DyanDr8naxQ2dRO9c4Ezo3NHHXhz8L0tTSRYWhiwyA=
289+
github.com/projectdiscovery/retryablehttp-go v1.3.6 h1:dLb0/YVX+oX70gpWxN5GXT8pCKpn8fdXfwOq2TsXxNY=
290+
github.com/projectdiscovery/retryablehttp-go v1.3.6/go.mod h1:tKVxmL4ixWy1MjYk5GJvFL0Cp10fnQgSp2F6bSBEypI=
293291
github.com/projectdiscovery/uncover v1.2.0 h1:31tjYa0v8FB8Ch8hJTxb+2t63vsljdOo0OSFylJcX4M=
294292
github.com/projectdiscovery/uncover v1.2.0/go.mod h1:ozqKb++p39Kmh1SmwIpbQ9p0aVGPXuwsb4/X2Kvx6ms=
295293
github.com/projectdiscovery/utils v0.9.0 h1:eu9vdbP0VYXI9nGSLfnOpUqBeW9/B/iSli7U8gPKZw8=
296294
github.com/projectdiscovery/utils v0.9.0/go.mod h1:zcVu1QTlMi5763qCol/L3ROnbd/UPSBP8fI5PmcnF6s=
297295
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
298-
github.com/refraction-networking/utls v1.7.1 h1:dxg+jla3uocgN8HtX+ccwDr68uCBBO3qLrkZUbqkcw0=
299-
github.com/refraction-networking/utls v1.7.1/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ=
296+
github.com/refraction-networking/utls v1.8.2 h1:j4Q1gJj0xngdeH+Ox/qND11aEfhpgoEvV+S9iJ2IdQo=
297+
github.com/refraction-networking/utls v1.8.2/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM=
300298
github.com/remeh/sizedwaitgroup v1.0.0 h1:VNGGFwNo/R5+MJBf6yrsr110p0m4/OX4S3DCy7Kyl5E=
301299
github.com/remeh/sizedwaitgroup v1.0.0/go.mod h1:3j2R4OIe/SeS6YDhICBy22RWjJC5eNCJ1V+9+NVNYlo=
302300
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=

pkg/port/port.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,22 @@ func (p *Port) StringWithDetails() string {
3333
}
3434

3535
type Service struct {
36-
DeviceType string `json:"device_type,omitempty"`
37-
ExtraInfo string `json:"extra_info,omitempty"`
38-
HighVersion string `json:"high_version,omitempty"`
39-
Hostname string `json:"hostname,omitempty"`
40-
LowVersion string `json:"low_version,omitempty"`
41-
Method string `json:"method,omitempty"`
42-
Name string `json:"name,omitempty"`
43-
OSType string `json:"os_type,omitempty"`
44-
Product string `json:"product,omitempty"`
45-
Proto string `json:"proto,omitempty"`
46-
RPCNum string `json:"rpc_num,omitempty"`
47-
ServiceFP string `json:"service_fp,omitempty"`
48-
Tunnel string `json:"tunnel,omitempty"`
49-
Version string `json:"version,omitempty"`
50-
Confidence int `json:"confidence,omitempty"`
36+
DeviceType string `json:"device_type,omitempty"`
37+
ExtraInfo string `json:"extra_info,omitempty"`
38+
HighVersion string `json:"high_version,omitempty"`
39+
Hostname string `json:"hostname,omitempty"`
40+
LowVersion string `json:"low_version,omitempty"`
41+
Method string `json:"method,omitempty"`
42+
Name string `json:"name,omitempty"`
43+
OSType string `json:"os_type,omitempty"`
44+
Product string `json:"product,omitempty"`
45+
Proto string `json:"proto,omitempty"`
46+
RPCNum string `json:"rpc_num,omitempty"`
47+
ServiceFP string `json:"service_fp,omitempty"`
48+
Tunnel string `json:"tunnel,omitempty"`
49+
Version string `json:"version,omitempty"`
50+
Confidence int `json:"confidence,omitempty"`
51+
CPEs []string `json:"cpes,omitempty"`
5152
}
5253

5354
func (s *Service) String() string {

pkg/runner/banners.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const banner = `
2020
`
2121

2222
// Version is the current Version of naabu
23-
const Version = `2.4.0`
23+
const Version = `2.5.0`
2424

2525
// showBanner is used to show the banner to the user
2626
func showBanner() {

pkg/runner/nmap.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,11 @@ func (r *Runner) convertNmapPortToNaabuPort(nmapPort nmap.Port) *port.Port {
267267

268268
// Convert service information if available
269269
if nmapPort.Service.Name != "" {
270+
cpes := make([]string, 0, len(nmapPort.Service.CPEs))
271+
for _, cpe := range nmapPort.Service.CPEs {
272+
cpes = append(cpes, string(cpe))
273+
}
274+
270275
naabuPort.Service = &port.Service{
271276
Name: nmapPort.Service.Name,
272277
Product: nmapPort.Service.Product,
@@ -282,6 +287,7 @@ func (r *Runner) convertNmapPortToNaabuPort(nmapPort nmap.Port) *port.Port {
282287
Tunnel: nmapPort.Service.Tunnel,
283288
LowVersion: nmapPort.Service.LowVersion,
284289
HighVersion: nmapPort.Service.HighVersion,
290+
CPEs: cpes,
285291
}
286292
}
287293

pkg/runner/ports.go

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -139,45 +139,50 @@ func excludePorts(options *Options, ports []*port.Port) ([]*port.Port, error) {
139139
func parsePortsSlice(ranges []string) ([]*port.Port, error) {
140140
var ports []*port.Port
141141
for _, r := range ranges {
142-
r = strings.TrimSpace(r)
143-
144-
portProtocol := protocol.TCP
145-
if strings.HasPrefix(r, "u:") {
146-
portProtocol = protocol.UDP
147-
r = strings.TrimPrefix(r, "u:")
148-
}
149-
150-
if strings.Contains(r, "-") {
151-
parts := strings.Split(r, "-")
152-
if len(parts) != portListStrParts {
153-
return nil, fmt.Errorf("invalid port selection segment: '%s'", r)
154-
}
155-
156-
p1, err := strconv.Atoi(parts[0])
157-
if err != nil {
158-
return nil, fmt.Errorf("invalid port number: '%s'", parts[0])
142+
for _, segment := range strings.Split(r, ",") {
143+
segment = strings.TrimSpace(segment)
144+
if segment == "" {
145+
continue
159146
}
160147

161-
p2, err := strconv.Atoi(parts[1])
162-
if err != nil {
163-
return nil, fmt.Errorf("invalid port number: '%s'", parts[1])
148+
portProtocol := protocol.TCP
149+
if strings.HasPrefix(segment, "u:") {
150+
portProtocol = protocol.UDP
151+
segment = strings.TrimPrefix(segment, "u:")
164152
}
165153

166-
if p1 > p2 || p2 > 65535 {
167-
return nil, fmt.Errorf("invalid port range: %d-%d", p1, p2)
168-
}
169-
170-
for i := p1; i <= p2; i++ {
171-
port := &port.Port{Port: i, Protocol: portProtocol}
154+
if strings.Contains(segment, "-") {
155+
parts := strings.Split(segment, "-")
156+
if len(parts) != portListStrParts {
157+
return nil, fmt.Errorf("invalid port selection segment: '%s'", segment)
158+
}
159+
160+
p1, err := strconv.Atoi(parts[0])
161+
if err != nil {
162+
return nil, fmt.Errorf("invalid port number: '%s'", parts[0])
163+
}
164+
165+
p2, err := strconv.Atoi(parts[1])
166+
if err != nil {
167+
return nil, fmt.Errorf("invalid port number: '%s'", parts[1])
168+
}
169+
170+
if p1 > p2 || p2 > 65535 {
171+
return nil, fmt.Errorf("invalid port range: %d-%d", p1, p2)
172+
}
173+
174+
for i := p1; i <= p2; i++ {
175+
port := &port.Port{Port: i, Protocol: portProtocol}
176+
ports = append(ports, port)
177+
}
178+
} else {
179+
portNumber, err := strconv.Atoi(segment)
180+
if err != nil || portNumber > 65535 {
181+
return nil, fmt.Errorf("invalid port number: '%s'", segment)
182+
}
183+
port := &port.Port{Port: portNumber, Protocol: portProtocol}
172184
ports = append(ports, port)
173185
}
174-
} else {
175-
portNumber, err := strconv.Atoi(r)
176-
if err != nil || portNumber > 65535 {
177-
return nil, fmt.Errorf("invalid port number: '%s'", r)
178-
}
179-
port := &port.Port{Port: portNumber, Protocol: portProtocol}
180-
ports = append(ports, port)
181186
}
182187
}
183188

0 commit comments

Comments
 (0)