teamviewer.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package packets
  2. import (
  3. "encoding/binary"
  4. "fmt"
  5. )
  6. const TeamViewerPort = 5938
  7. var teamViewerCommands = map[uint8]string{
  8. 10: "CMD_IDENTIFY",
  9. 11: "CMD_REQUESTCONNECT",
  10. 13: "CMD_DISCONNECT",
  11. 14: "CMD_VNCDISCONNECT",
  12. 15: "CMD_TVCONNECTIONFAILED",
  13. 16: "CMD_PING",
  14. 17: "CMD_PINGOK",
  15. 18: "CMD_MASTERCOMMAND",
  16. 19: "CMD_MASTERRESPONSE",
  17. 20: "CMD_CHANGECONNECTION",
  18. 21: "CMD_NOPARTNERCONNECT",
  19. 22: "CMD_CONNECTTOWAITINGTHREAD",
  20. 23: "CMD_SESSIONMODE",
  21. 24: "CMD_REQUESTROUTINGSESSION",
  22. 25: "CMD_TIMEOUT",
  23. 26: "CMD_JAVACONNECT",
  24. 27: "CMD_KEEPALIVEBEEP",
  25. 28: "CMD_REQUESTKEEPALIVE",
  26. 29: "CMD_MASTERCOMMAND_ENCRYPTED",
  27. 30: "CMD_MASTERRESPONSE_ENCRYPTED",
  28. 31: "CMD_REQUESTRECONNECT",
  29. 32: "CMD_RECONNECTTOWAITINGTHREAD",
  30. 33: "CMD_STARTLOGGING",
  31. 34: "CMD_SERVERAVAILABLE",
  32. 35: "CMD_KEEPALIVEREQUEST",
  33. 36: "CMD_OK",
  34. 37: "CMD_FAILED",
  35. 38: "CMD_PING_PERFORMANCE",
  36. 39: "CMD_PING_PERFORMANCE_RESPONSE",
  37. 40: "CMD_REQUESTKEEPALIVE2",
  38. 41: "CMD_DISCONNECT_SWITCHEDTOUDP",
  39. 42: "CMD_SENDMODE_UDP",
  40. 43: "CMD_KEEPALIVEREQUEST_ANSWER",
  41. 44: "CMD_ROUTE_CMD_TO_CLIENT",
  42. 45: "CMD_NEW_MASTERLOGIN",
  43. 46: "CMD_BUDDY",
  44. 47: "CMD_ACCEPTROUTINGSESSION",
  45. 48: "CMD_NEW_MASTERLOGIN_ANSWER",
  46. 49: "CMD_BUDDY_ENCRYPTED",
  47. 50: "CMD_REQUEST_ROUTE_BUDDY",
  48. 51: "CMD_CONTACT_OTHER_MASTER",
  49. 52: "CMD_REQUEST_ROUTE_ENCRYPTED",
  50. 53: "CMD_ENDSESSION",
  51. 54: "CMD_SESSIONID",
  52. 55: "CMD_RECONNECT_TO_SESSION",
  53. 56: "CMD_RECONNECT_TO_SESSION_ANSWER",
  54. 57: "CMD_MEETING_CONTROL",
  55. 58: "CMD_CARRIER_SWITCH",
  56. 59: "CMD_MEETING_AUTHENTICATION",
  57. 60: "CMD_ROUTERCMD",
  58. 61: "CMD_PARTNERRECONNECT",
  59. 62: "CMD_CONGRESTION_CONTROL",
  60. 63: "CMD_ACK",
  61. 70: "CMD_UDPREQUESTCONNECT",
  62. 71: "CMD_UDPPING",
  63. 72: "CMD_UDPREQUESTCONNECT_VPN",
  64. 90: "CMD_DATA",
  65. 91: "CMD_DATA2",
  66. 92: "CMD_DATA_ENCRYPTED",
  67. 93: "CMD_REQUESTENCRYPTION",
  68. 94: "CMD_CONFIRMENCRYPTION",
  69. 95: "CMD_ENCRYPTIONREQUESTFAILED",
  70. 96: "CMD_REQUESTNOENCRYPTION",
  71. 97: "CMD_UDPFLOWCONTROL",
  72. 98: "CMD_DATA3",
  73. 99: "CMD_DATA3_ENCRYPTED",
  74. 100: "CMD_DATA3_RESENDPACKETS",
  75. 101: "CMD_DATA3_ACKPACKETS",
  76. 102: "CMD_AUTH_CHALLENGE",
  77. 103: "CMD_AUTH_RESPONSE",
  78. 104: "CMD_AUTH_RESULT",
  79. 105: "CMD_RIP_MESSAGES",
  80. 106: "CMD_DATA4",
  81. 107: "CMD_DATASTREAM",
  82. 108: "CMD_UDPHEARTBEAT",
  83. 109: "CMD_DATA_DIRECTED",
  84. 110: "CMD_UDP_RESENDPACKETS",
  85. 111: "CMD_UDP_ACKPACKETS",
  86. 112: "CMD_UDP_PROTECTEDCOMMAND",
  87. 113: "CMD_FLUSHSENDBUFFER",
  88. }
  89. type TeamViewerPacket struct {
  90. Magic uint16
  91. Version string
  92. CommandCode uint8
  93. Command string
  94. }
  95. func ParseTeamViewer(data []byte) *TeamViewerPacket {
  96. if len(data) < 3 {
  97. return nil
  98. }
  99. magic := binary.BigEndian.Uint16(data[0:2])
  100. cmdCode := uint8(data[3])
  101. version := "1.x"
  102. cmd := "CMD_?"
  103. if magic == 0x1724 {
  104. version = "1.x"
  105. } else if magic == 0x1130 {
  106. version = "2.x"
  107. } else {
  108. version = fmt.Sprintf("?.? (magic=0x%x)", magic)
  109. }
  110. if val, found := teamViewerCommands[cmdCode]; !found {
  111. return nil
  112. } else {
  113. cmd = val
  114. }
  115. return &TeamViewerPacket{
  116. Magic: magic,
  117. Version: version,
  118. CommandCode: cmdCode,
  119. Command: cmd,
  120. }
  121. }