Skip to content

Commit

Permalink
mod: remove dev and use np to specify nextHop gateway
Browse files Browse the repository at this point in the history
  • Loading branch information
XinRoom committed Jan 12, 2023
1 parent 56e7eb6 commit 780f5f4
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 10 deletions.
13 changes: 7 additions & 6 deletions cmd/go-portScan.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ var (
rateP int
iL string
devices bool
dev string
nexthop string
httpx bool
netLive bool
bp bool
Expand All @@ -44,7 +44,7 @@ func parseFlag(c *cli.Context) {
ipStr = c.String("ip")
iL = c.String("iL")
portStr = c.String("port")
dev = c.String("dev")
nexthop = c.String("nexthop")
devices = c.Bool("devices")
pn = c.Bool("Pn")
rateP = c.Int("rateP")
Expand Down Expand Up @@ -206,7 +206,7 @@ func run(c *cli.Context) error {
option := port.Option{
Rate: rate,
Timeout: timeout,
Dev: dev,
NextHop: nexthop,
}
if sT {
// tcp
Expand Down Expand Up @@ -348,9 +348,10 @@ func main() {
Value: true,
},
&cli.StringFlag{
Name: "dev",
Usage: "specified pcap dev name",
Value: "",
Name: "nexthop",
Aliases: []string{"nh"},
Usage: "specified nexthop gw add to pcap dev",
Value: "",
},
&cli.IntFlag{
Name: "rate",
Expand Down
2 changes: 1 addition & 1 deletion core/port/port.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ type OpenIpPort struct {
type Option struct {
Rate int // 每秒速度限制, 单位: s, 会在1s内平均发送, 相当于每个包之间的延迟
Timeout int // TCP连接响应延迟, 单位: ms
Dev string // pcap dev name
NextHop string // pcap dev name
}

// ParsePortRangeStr 解析端口字符串
Expand Down
25 changes: 25 additions & 0 deletions core/port/syn/device.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,28 @@ func GetIfaceMac(ifaceAddr net.IP) (src net.IP, mac net.HardwareAddr) {
return nil, nil
}

// GetMacByGw get srcIp srcMac devname by gw
func GetMacByGw(gw net.IP) (srcIp net.IP, srcMac net.HardwareAddr, devname string, err error) {
srcIp, srcMac = GetIfaceMac(gw)
if srcIp == nil {
err = errors.New("can not find this dev by gw")
return
}
srcIp = srcIp.To4()
devices, err := pcap.FindAllDevs()
if err != nil {
return
}
for _, d := range devices {
if len(d.Addresses) > 0 && d.Addresses[0].IP.String() == srcIp.String() {
devname = d.Name
return
}
}
err = errors.New("can not find this dev")
return
}

// GetRouterV4 get ipv6 router by dst ip
func GetRouterV4(dst net.IP) (srcIp net.IP, srcMac net.HardwareAddr, gw net.IP, devName string, err error) {
// 同网段
Expand Down Expand Up @@ -74,6 +96,9 @@ func GetRouterV4(dst net.IP) (srcIp net.IP, srcMac net.HardwareAddr, gw net.IP,
srcIp = srcIp.To4()
devName, _ = GetDevByIp(srcIp)
if srcIp == nil || err != nil || srcMac == nil {
if err == nil {
err = fmt.Errorf("err")
}
return nil, nil, nil, "", fmt.Errorf("no router, %s", err)
}
return
Expand Down
18 changes: 15 additions & 3 deletions core/port/syn/syn.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,24 @@ func NewSynScanner(firstIp net.IP, retChan chan port.OpenIpPort, option port.Opt
return
}

// get router info
srcIp, srcMac, gw, devName, err := GetRouterV4(firstIp)
var devName string
var srcIp net.IP
var srcMac net.HardwareAddr
var gw net.IP

// specify dev
if option.NextHop != "" {
gw = net.ParseIP(option.NextHop).To4()
srcIp, srcMac, devName, err = GetMacByGw(gw)
} else {
// get router info
srcIp, srcMac, gw, devName, err = GetRouterV4(firstIp)
}
if err != nil {
return
}
if devName == "" && option.Dev == "" {

if devName == "" {
err = errors.New("get router info fail: no dev name")
return
}
Expand Down

0 comments on commit 780f5f4

Please sign in to comment.