initial release of jing-go
This commit is contained in:
139
jing.go
Normal file
139
jing.go
Normal file
@@ -0,0 +1,139 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
|
||||
//"io/ioutil"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/go-ping/ping"
|
||||
"github.com/pborman/getopt/v2"
|
||||
)
|
||||
|
||||
var (
|
||||
target = "127.0.0.1"
|
||||
target_list = ""
|
||||
sleep = 100
|
||||
privilege = false
|
||||
count = 3
|
||||
timeout = 3000000000
|
||||
json_out = false
|
||||
target_str = ""
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
getopt.FlagLong(&target, "target", 't', "the target host to ping")
|
||||
getopt.FlagLong(&target_list, "target_list", 'T', "define targetlist with hosts to ping")
|
||||
getopt.FlagLong(&sleep, "sleep", 's', "sleep between packets")
|
||||
getopt.FlagLong(&count, "count", 'c', "how many packets to send")
|
||||
getopt.FlagLong(&privilege, "privilege", 'r', "admin/root privileges available")
|
||||
getopt.FlagLong(&json_out, "json-output", 'J', "prefer json output")
|
||||
// getopt.FlagLong(&timeout,"")
|
||||
}
|
||||
|
||||
type ping_args struct {
|
||||
Target string
|
||||
Target_list string
|
||||
Timeout int
|
||||
Count int
|
||||
Privilege bool
|
||||
}
|
||||
|
||||
type ping_result struct {
|
||||
Target string
|
||||
Sent int
|
||||
Recv int
|
||||
Alive bool
|
||||
}
|
||||
|
||||
func pingme(target string, count int, timeout int) {
|
||||
|
||||
var alive bool
|
||||
pinger, err := ping.NewPinger(target)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
||||
}
|
||||
// fix this with time import and milliseconds
|
||||
pinger.Timeout = 3000000000
|
||||
pinger.Count = 3
|
||||
|
||||
pinger.OnFinish = func(stats *ping.Statistics) {
|
||||
if stats.PacketsRecv > 0 {
|
||||
alive = true
|
||||
} else {
|
||||
alive = false
|
||||
}
|
||||
|
||||
if json_out == false {
|
||||
fmt.Printf("%s (%s) %d/%d (Sent/Recv) Alive: %t\n", stats.Addr, stats.IPAddr, stats.PacketsSent, stats.PacketsRecv, alive)
|
||||
} else {
|
||||
|
||||
p_result := ping_result{
|
||||
|
||||
Target: target,
|
||||
Sent: stats.PacketsSent,
|
||||
Recv: stats.PacketsRecv,
|
||||
Alive: alive,
|
||||
}
|
||||
json_result, err := json.Marshal(p_result)
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to encode")
|
||||
}
|
||||
fmt.Println(string(json_result))
|
||||
}
|
||||
}
|
||||
|
||||
//pinger.SetPrivileged(true)
|
||||
err = pinger.Run()
|
||||
if err != nil {
|
||||
|
||||
fmt.Printf("Failed to ping target host :%s", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
getopt.Parse()
|
||||
p_args := ping_args{
|
||||
Target: target,
|
||||
Target_list: target_list,
|
||||
Timeout: timeout,
|
||||
Count: count,
|
||||
Privilege: privilege}
|
||||
|
||||
var json_data []byte
|
||||
|
||||
json_data, err := json.Marshal(p_args)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
if json_out == true {
|
||||
fmt.Println(string(json_data))
|
||||
}
|
||||
|
||||
if target_list != "" {
|
||||
|
||||
buf, err := os.Open(target_list)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
snl := bufio.NewScanner(buf)
|
||||
for snl.Scan() {
|
||||
pingme(snl.Text(), 3, 3000000000)
|
||||
|
||||
}
|
||||
} else {
|
||||
pingme(target, 3, 3000000000)
|
||||
}
|
||||
if json_out == false {
|
||||
fmt.Printf("Done\n")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user