Advertisement
Guest User

Untitled

a guest
Jul 18th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. package main
  2.  
  3. // Embarrassingly quick and dirty Go program to reboot a TP-Link TD-8840 ADSL modem.
  4. // Will possibly work on other devices with slight modifications.
  5.  
  6. import (
  7. "github.com/ziutek/telnet"
  8. "log"
  9. "os"
  10. "time"
  11. // "fmt"
  12. )
  13.  
  14. const timeout = 5 * time.Second
  15.  
  16. func checkErr(err error) {
  17. if err != nil {
  18. log.Fatalln("Error:", err)
  19. }
  20. }
  21.  
  22. func expect(t *telnet.Conn, d ...string) {
  23. checkErr(t.SetReadDeadline(time.Now().Add(timeout)))
  24. checkErr(t.SkipUntil(d...))
  25. }
  26.  
  27. func sendln(t *telnet.Conn, s string) {
  28. checkErr(t.SetWriteDeadline(time.Now().Add(timeout)))
  29. buf := make([]byte, len(s)+1)
  30. copy(buf, s)
  31. buf[len(s)] = '\n'
  32. _, err := t.Write(buf)
  33. checkErr(err)
  34. }
  35.  
  36. func briefDelay() {
  37. time.Sleep(100 * time.Millisecond)
  38. }
  39.  
  40. func longDelay() {
  41. time.Sleep(2000 * time.Millisecond)
  42. }
  43.  
  44. func main() {
  45. if len(os.Args) != 2 {
  46. log.Printf("Usage: %s HOST", os.Args[0])
  47. return
  48. }
  49. dst := os.Args[1]
  50.  
  51. t, err := telnet.Dial("tcp", dst + ":23")
  52. checkErr(err)
  53. // fmt.Println("connected..")
  54.  
  55. t.SetUnixWriteMode(true)
  56.  
  57. expect(t, "username:")
  58. briefDelay()
  59. sendln(t, "admin")
  60. // fmt.Println("sent username..")
  61.  
  62. expect(t, "password:")
  63. briefDelay()
  64. sendln(t, "admin")
  65. // fmt.Println("sent password..")
  66.  
  67. longDelay()
  68. sendln(t, "dev reboot")
  69.  
  70. longDelay()
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement