debug.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. var r messages.ASRep
  41. r.Unmarshal(buf[:n])
  42. fmt.Fprintf(os.Stdout, "AS_REP: %+v\n", r)
  43. kb, _ := hex.DecodeString(ktab)
  44. kt, err := keytab.Parse(kb)
  45. if err != nil {
  46. fmt.Fprintf(os.Stderr, "KT load err: %v\n", err)
  47. }
  48. fmt.Fprintf(os.Stdout, "KT: %+v", kt)
  49. err = r.DecryptEncPart(kt)
  50. if err != nil {
  51. fmt.Fprintf(os.Stderr, "Decrypt err: %v\n", err)
  52. }
  53. fmt.Fprintf(os.Stdout, "AS REP: %+v\n", r)
  54. }