Skip to content

Commit aead0d4

Browse files
authored
Merge pull request #749 from devlights/add-simple-port-scanner
2 parents 4984043 + a294dce commit aead0d4

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
tasks:
6+
run:
7+
cmds:
8+
- go run main.go -debug 127.0.0.1 50010 50020
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"fmt"
6+
"log"
7+
"net"
8+
"os"
9+
"strconv"
10+
"time"
11+
)
12+
13+
type Args struct {
14+
host string
15+
from int
16+
to int
17+
}
18+
19+
var (
20+
debug = flag.Bool("debug", false, "debug")
21+
args = Args{}
22+
)
23+
24+
func init() {
25+
log.SetFlags(0)
26+
}
27+
28+
func panicErr[T any](o T, err error) T {
29+
if err != nil {
30+
log.Panic(err)
31+
}
32+
33+
return o
34+
}
35+
36+
func main() {
37+
flag.Parse()
38+
39+
if flag.NArg() != 3 {
40+
log.Println("Usage: simple_port_scan host port(from) port(to)")
41+
os.Exit(1)
42+
}
43+
44+
a := flag.Args()
45+
args.host = a[0]
46+
args.from = panicErr(strconv.Atoi(a[1]))
47+
args.to = panicErr(strconv.Atoi(a[2]))
48+
49+
var l net.Listener
50+
var e error
51+
if *debug {
52+
l, e = net.Listen("tcp4", fmt.Sprintf("127.0.0.1:%d", ((args.to-args.from)/2)+args.from))
53+
if e != nil {
54+
log.Println(e)
55+
}
56+
}
57+
defer l.Close()
58+
59+
if err := run(); err != nil {
60+
log.Panic(err)
61+
}
62+
}
63+
64+
func run() error {
65+
for i := args.from; i <= args.to; i++ {
66+
var (
67+
addr = fmt.Sprintf("%s:%d", args.host, i)
68+
conn net.Conn
69+
err error
70+
)
71+
72+
conn, err = net.DialTimeout("tcp4", addr, 1*time.Second)
73+
switch err {
74+
case nil:
75+
log.Printf("%d open", i)
76+
conn.Close()
77+
default:
78+
log.Printf("%d closed", i)
79+
}
80+
}
81+
82+
return nil
83+
}

0 commit comments

Comments
 (0)