Skip to content

Commit 7103888

Browse files
juzeonyuhan6665
authored andcommitted
fix writer race condition
1 parent da1efd8 commit 7103888

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,14 @@ func main() {
9898
slog.Info("Parsed domains", "count", len(domains))
9999
ipChan = Iterate(strings.NewReader(strings.Join(domains, "\n")))
100100
}
101+
outCh := OutWriter(outWriter)
102+
defer close(outCh)
101103
var wg sync.WaitGroup
102104
wg.Add(thread)
103105
for i := 0; i < thread; i++ {
104106
go func() {
105107
for ip := range ipChan {
106-
ScanTLS(ip, outWriter)
108+
ScanTLS(ip, outCh)
107109
}
108110
wg.Done()
109111
}()

scanner.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"crypto/tls"
5-
"io"
65
"log/slog"
76
"net"
87
"strconv"
@@ -17,7 +16,7 @@ var TLSDictionary = map[uint16]string{
1716
0x0304: "1.3",
1817
}
1918

20-
func ScanTLS(ip net.IP, out io.Writer) {
19+
func ScanTLS(ip net.IP, out chan<- string) {
2120
hostPort := net.JoinHostPort(ip.String(), strconv.Itoa(port))
2221
conn, err := net.DialTimeout("tcp", hostPort, time.Duration(timeout)*time.Second)
2322
if err != nil {
@@ -50,7 +49,7 @@ func ScanTLS(ip net.IP, out io.Writer) {
5049
log = slog.Debug
5150
feasible = false
5251
} else {
53-
_, _ = io.WriteString(out, strings.Join([]string{ip.String(), domain, "\"" + issuers + "\""}, ",")+"\n")
52+
out <- strings.Join([]string{ip.String(), domain, "\"" + issuers + "\""}, ",") + "\n"
5453
}
5554
log("Connected to target", "feasible", feasible, "host", ip.String(),
5655
"tls", TLSDictionary[state.Version],

utils.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,12 @@ func RemoveDuplicateStr(strSlice []string) []string {
9292
}
9393
return list
9494
}
95+
func OutWriter(writer io.Writer) chan<- string {
96+
ch := make(chan string)
97+
go func() {
98+
for s := range ch {
99+
_, _ = io.WriteString(writer, s)
100+
}
101+
}()
102+
return ch
103+
}

0 commit comments

Comments
 (0)