Skip to content

Commit 8cf5fcd

Browse files
updated network package to work on android
1 parent 1679c0e commit 8cf5fcd

File tree

3 files changed

+43
-4
lines changed

3 files changed

+43
-4
lines changed

arpspoof/arpspoof.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,14 @@ func (ar *ARPSpoofer) ARPTable() *ARPTable {
200200
func NewARPSpoofer(conf *ARPSpoofConfig) (*ARPSpoofer, error) {
201201
arpspoofer := &ARPSpoofer{}
202202
// determining interface
203-
iface, err := network.GetDefaultInterface()
203+
var iface *net.Interface
204+
var err error
205+
iface, err = network.GetDefaultInterface()
204206
if err != nil {
205-
return nil, err
207+
iface, err = network.GetDefaultInterfaceFromRoute()
208+
if err != nil {
209+
return nil, err
210+
}
206211
}
207212
if conf.Interface != "" {
208213
arpspoofer.iface, err = net.InterfaceByName(conf.Interface)
@@ -236,7 +241,10 @@ func NewARPSpoofer(conf *ARPSpoofConfig) (*ARPSpoofer, error) {
236241
} else {
237242
gwIP, err = network.GetDefaultGatewayIPv4()
238243
if err != nil {
239-
return nil, fmt.Errorf("failed fetching gateway ip: %w", err)
244+
gwIP, err = network.GetDefaultGatewayIPv4FromRoute()
245+
if err != nil {
246+
return nil, fmt.Errorf("failed fetching gateway ip: %w", err)
247+
}
240248
}
241249
}
242250
arpspoofer.gwIP = gwIP

network/network.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,21 @@ func GetDefaultInterface() (*net.Interface, error) {
139139
return net.InterfaceByName(defaultInterface)
140140
}
141141

142+
func GetDefaultInterfaceFromRoute() (*net.Interface, error) {
143+
cmd := exec.Command("sh", "-c", `ip -4 route get 8.8.8.8 | tr -d '\n'`)
144+
routeRaw, err := cmd.Output()
145+
if err != nil {
146+
return nil, err
147+
}
148+
routeFields := strings.Fields(string(routeRaw))
149+
for i, f := range routeFields {
150+
if f == "dev" && i+1 < len(routeFields) && routeFields[i+1] != "tun" {
151+
return net.InterfaceByName(routeFields[i+1])
152+
}
153+
}
154+
return nil, fmt.Errorf("failed getting default interface from route")
155+
}
156+
142157
func GetDefaultGatewayIPv4() (netip.Addr, error) {
143158
cmd := exec.Command("sh", "-c", `ip -4 route show 0.0.0.0/0 | awk '{print $3 " " $5}'`)
144159
ipdevRaw, err := cmd.Output()
@@ -167,6 +182,22 @@ func GetDefaultGatewayIPv4() (netip.Addr, error) {
167182
return netip.Addr{}, fmt.Errorf("gateway IPv4 not found ")
168183
}
169184

185+
func GetDefaultGatewayIPv4FromRoute() (netip.Addr, error) {
186+
cmd := exec.Command("sh", "-c", `ip -4 route get 8.8.8.8 | awk '{print $3}' | tr -d '\n'`)
187+
ipstrRaw, err := cmd.Output()
188+
if err != nil {
189+
return netip.Addr{}, err
190+
}
191+
ip, err := netip.ParseAddr(string(ipstrRaw))
192+
if err != nil {
193+
return netip.Addr{}, err
194+
}
195+
if !ip.IsValid() || !ip.Is4() {
196+
return netip.Addr{}, fmt.Errorf("failed getting default gateway from route")
197+
}
198+
return ip, nil
199+
}
200+
170201
func GetGatewayIPv4FromInterface(iface string) (netip.Addr, error) {
171202
cmd := exec.Command("sh", "-c", fmt.Sprintf("ip -4 route show dev %s", iface))
172203
routes, err := cmd.Output()

version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package mshark
22

3-
const Version string = "mshark v0.0.14"
3+
const Version string = "mshark v0.0.15"

0 commit comments

Comments
 (0)