debug.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "encoding/hex"
  4. "fmt"
  5. "github.com/jcmturner/gokrb5/keytab"
  6. "github.com/jcmturner/gokrb5/messages"
  7. "github.com/jcmturner/gokrb5/types"
  8. "net"
  9. "os"
  10. "time"
  11. )
  12. const ktab = "05020000004b0001000b544553542e474f4b5242350009746573747573657231000000015898e0770100120020bbdc430aab7e2d4622a0b6951481453b0962e9db8e2f168942ad175cda6d9de900000001"
  13. func main() {
  14. udpAddr, _ := net.ResolveUDPAddr("udp", "10.80.88.88:88")
  15. realm := "TEST.GOKRB5"
  16. conn, _ := net.DialUDP("udp", nil, udpAddr)
  17. defer conn.Close()
  18. var pas types.PADataSequence
  19. pa := types.PAData{
  20. PADataType: 149,
  21. }
  22. pas = append(pas, pa)
  23. a := messages.NewASReq()
  24. a.PAData = pas
  25. a.ReqBody.Realm = realm
  26. a.ReqBody.CName.NameString = []string{"testuser1"}
  27. a.ReqBody.SName.NameType = 2
  28. a.ReqBody.SName.NameString = []string{"krbtgt", realm}
  29. a.ReqBody.Till = time.Now().Add(10 * time.Hour)
  30. a.ReqBody.Nonce = 2069991465
  31. a.ReqBody.EType = []int{18}
  32. fmt.Fprintf(os.Stdout, "AS_REQ: %+v\n", a)
  33. b, err := a.Marshal()
  34. if err != nil {
  35. fmt.Fprintf(os.Stderr, "Error marshalling AS_REQ: %v\n", err)
  36. }
  37. _, _ = conn.Write(b)
  38. buf := make([]byte, 4096)
  39. n, _, err := conn.ReadFrom(buf)
  40. //fmt.Fprintf(os.Stderr, "%v\n", hex.EncodeToString(buf[:n]))
  41. var r messages.ASRep
  42. r.Unmarshal(buf[:n])
  43. fmt.Fprintf(os.Stdout, "AS_REP: %+v\n", r)
  44. kb, _ := hex.DecodeString(ktab)
  45. kt, err := keytab.Parse(kb)
  46. if err != nil {
  47. fmt.Fprintf(os.Stderr, "KT load err: %v\n\n", err)
  48. }
  49. fmt.Fprintf(os.Stdout, "KT: %+v", kt)
  50. err = r.DecryptEncPartWithKeytab(kt)
  51. if err != nil {
  52. fmt.Fprintf(os.Stderr, "Decrypt err: %v\n", err)
  53. }
  54. fmt.Fprintf(os.Stdout, "\n\nAS REP decrypted with keytab: %+v\n", r)
  55. pswd := "passwordvalue"
  56. err = r.DecryptEncPartWithPassword(pswd)
  57. if err != nil {
  58. fmt.Fprintf(os.Stderr, "Decrypt err: %v\n", err)
  59. }
  60. fmt.Fprintf(os.Stdout, "\nAS REP decrypted with passwd: %+v\n", r)
  61. }