Mercurial > mercurial > hgweb_golang.cgi
changeset 10:b0784443ed87
add netcat and unsleep.
author | pyon@macmini |
---|---|
date | Sat, 04 Nov 2017 11:07:50 +0900 |
parents | 54a75ff1c288 |
children | c3a589f0521d |
files | src/netcat.go src/unsleep.go |
diffstat | 2 files changed, 255 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/netcat.go Sat Nov 04 11:07:50 2017 +0900 @@ -0,0 +1,175 @@ +// OK : windows -> osx +// Not OK : osx -> windows +// OK : osx, win <-> yahoo.com +/* + Netcat + + -v verbose + -vv very verbose + -w timeout [ -w 2 2seconds ] + -i interval + -s local source address + -z zero-I/O mode ( for portscan ) + -u with UDP ( default use TCP ) + -n don't resolve name/address + -d stealth mode ( don't read from stdin ) + -l listen mode ( once ) + -L listen mode ( continuous ) + + Portscan + $ nc -v -z -w 1 192.168.1.1 1-140 + $ nc -u -v -z -w 1 192.168.1.1 1-140 + + Web-client + $ nc -v www.yahoo.com 80 + + File transfer + $ nc -l 1234 > file + % nc hoge.com 1234 < file + + Backdoor + C:\> nc -L -d -e cmd.exe -p 8080 + + */ +package main + +import ( + "flag" + "fmt" + "io" + "log" + "net" + "os" +) + +func main() { + + verbose := flag.Bool( "v", false, "verbose" ) + vverbose := flag.Bool( "vv", false, "very verbose" ) + udp := flag.Bool( "u", false, "with udp" ) +// interval := flag.Int( "i", 0, "interval for lines sent, port scanned" ) +// timeout := flag.Int( "w", 7, "timeout for connects and final net reads" ) + listen := flag.Bool( "l", false, "listen mode" ) + zmode := flag.Bool( "z", false, "zero-I/O mode" ) + laddr := flag.String( "s", "", "local source address" ) + example := flag.Bool( "e", false, "print examples" ) + + flag.Parse() + + if *example { + printExample() + os.Exit( 0 ) + } + + if flag.NArg() == 0 { + fmt.Fprintf( os.Stderr, "netcat v0.1 (20170604)\n" ) + fmt.Fprintf( os.Stderr, " -h or --help option\n" ) + os.Exit( 0 ) + } + + p := "tcp" + if *udp { + p = "udp" + } + + if *listen { + + if flag.NArg() != 1 { + flag.PrintDefaults() + os.Exit( 1 ) + } + + port := flag.Arg( 0 ) + + addr := getLocalIP() + if *laddr == "" { + addr = *laddr + } + + if *verbose || *vverbose { + msg := fmt.Sprintf( "listening... %s:%s[%s]", addr, port, p ) + printVerbose( msg, "" ) + } + + l, err := net.Listen( p, net.JoinHostPort( addr, port ) ) + if err != nil { + log.Fatal( err ) + } + defer l.Close() + + conn, err := l.Accept() + if err != nil { + log.Fatal( err ) + } + io.Copy( os.Stdout, conn ) + conn.Close() + + } else { + + if flag.NArg() != 2 { + flag.PrintDefaults() + os.Exit( 1 ) + } + + addr := flag.Arg( 0 ) + port := flag.Arg( 1 ) + + conn, err := net.Dial( p, net.JoinHostPort( addr, port ) ) + if err != nil { + log.Fatal( err ) + } + defer conn.Close() + go mustCopy( os.Stdout, conn ) + mustCopy( conn, os.Stdin ) + } + + if *zmode { + /* + address := "" // for me. + port := "1-1024" + server := address + ":" + port + */ + } +} + +func mustCopy( dst io.Writer, src io.Reader ) { + if _, err := io.Copy( dst, src ); err != nil { + log.Fatal( err ) + } +} + +func printVerbose( vmsg, vvmsg string ) { + fmt.Fprintln( os.Stderr, vmsg, vvmsg ) +} + +func printExample() { + fmt.Fprintln( os.Stderr, "\n[Exaples]" ) + fmt.Fprintln( os.Stderr, " Portscan" ) + fmt.Fprintln( os.Stderr, " $ nc -v -z -w 1 192.168.1.1 1-140" ) + fmt.Fprintln( os.Stderr, " $ nc -u -v -z -w 1 192.168.1.1 1-140\n" ) + fmt.Fprintln( os.Stderr, " Web-client" ) + fmt.Fprintln( os.Stderr, " $ nc -v www.yahoo.com 80" ) + fmt.Fprintln( os.Stderr, " GET / HTTP/1.0[Enter]" ) + fmt.Fprintln( os.Stderr, " [ENTER]\n" ) + fmt.Fprintln( os.Stderr, " File transfer" ) + fmt.Fprintln( os.Stderr, " $ nc -l 1234 > file" ) + fmt.Fprintln( os.Stderr, " % nc hoge.com 1234 < file\n" ) + fmt.Fprintln( os.Stderr, " Backdoor" ) + fmt.Fprintln( os.Stderr, " C:\\> nc -L -d -e cmd.exe -p 8080" ) +} + +func getLocalIP() string { + addrs, err := net.InterfaceAddrs() + if err != nil { + log.Fatal( err ) + } + for _, addr := range addrs { + if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if ipnet.IP.To4() != nil { + return ipnet.IP.String() + } + } + } + return "127.0.0.1" +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/unsleep.go Sat Nov 04 11:07:50 2017 +0900 @@ -0,0 +1,80 @@ +package main + +import( + "flag" + "fmt" + "time" + "os" +) + +var sec = 0 + +func main() { + + // arguments + t := flag.Int( "t", 1, "interval" ) + s := flag.Bool( "s", false, "normal sleep" ) + q := flag.Bool( "q", false, "quiet ( not print count and time )" ) + c := flag.Int( "c", 0, "loop count ( without [s] )" ) + m := flag.Bool( "m", false, "print every minute ( without [q] )" ) + b := flag.Bool( "b", false, "beep" ) + + flag.Parse() + + if *t > 0 { + + if !*q { + s := fmt.Sprintf( "[%04d] %s ...", *c, time.Now().Format( "15:04:05" ) ) + fmt.Println( s ) + } + + if *s { + for i := 0; i < *t; i++ { + sleep1ms( *q, *m, *b, i + 1 ) + } + os.Exit( 0 ) + } + + if *c < 0 { + fmt.Fprintln( os.Stderr, "bad loop count." ) + os.Exit( 1 ) + } + if *c > 0 { + for i := 0; i < *c; i++ { + sleep1ms( *q, *m, *b, *c - i - 1 ) + } + } else { + n := 1 + for { + sleep1ms( *q, *m, *b, n ) + n++ + } + } + + } else { + fmt.Fprintln( os.Stderr, "bad time." ) + os.Exit( 1 ) + } +} + +func sleep1ms( quiet, minute, beep bool, n int ) { + + s := time.Duration( 1.00 * 1000 ) * time.Millisecond + time.Sleep( s ) + sec++ + + if minute && sec % 60 == 0 { + str := fmt.Sprintf( "[%04d] %s", n / 60, time.Now().Format( "15:04:05" ) ) + fmt.Println( str ) + } + if !quiet && !minute { + str := fmt.Sprintf( "[%04d] %s", n, time.Now().Format( "15:04:05" ) ) + fmt.Println( str ) + } + + if beep { + //os.Stdout.Write( []byte( "\u0007" ) ) + fmt.Print( "\a" ) + } +} +