Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. package glutton
  2.  
  3. import (
  4. "bufio"
  5. "bytes"
  6. "os/exec"
  7. "regexp"
  8. )
  9.  
  10. const tcpRegExp = `\[\w+]\s+\w+\s+.+?src=(\d+\.\d+\.\d+\.\d+)\s+dst=(\d+\.\d+\.\d+\.\d+)\s+sport=(\d+)\s+dport=(\d+)\s+`
  11. const udpRegExp = `\[(\w+)]\s+\w+\s+.+?src=(\d+\.\d+\.\d+\.\d+)\s+dst=(\d+\.\d+\.\d+\.\d+)\s+sport=(\d+)\s+dport=(\d+)\s+`
  12.  
  13. // MonitorTCPConnections monitors conntrack for TCP connections
  14. func MonitorTCPConnections(channel *NonBlockingChan) {
  15. args := []string{
  16. "--buffer-size", "30000000",
  17. "-E",
  18. "-p", "tcp",
  19. "-e", "NEW",
  20. }
  21. cmd := exec.Command("conntrack", args...)
  22. stderrPipe, err := cmd.StderrPipe()
  23. CheckError("", err)
  24. go func() {
  25. stderr := bufio.NewReader(stderrPipe)
  26. for {
  27. line, _, readErr := stderr.ReadLine()
  28. println("[*]", string(line))
  29. CheckError("", readErr)
  30. }
  31. }()
  32. stdoutPipe, err := cmd.StdoutPipe()
  33. CheckError("", err)
  34. stdout := bufio.NewReader(stdoutPipe)
  35. cmd.Start()
  36. var buffer bytes.Buffer
  37. for {
  38. frag, isPrefix, err := stdout.ReadLine()
  39. CheckError("", err)
  40. buffer.Write(frag)
  41. if !isPrefix {
  42. line := buffer.String()
  43. go func() {
  44. re := regexp.MustCompile(tcpRegExp)
  45. str := re.FindStringSubmatch(line)
  46. channel.Send <- str
  47.  
  48. }()
  49. buffer.Reset()
  50. }
  51. }
  52. }
  53.  
  54. // MonitorUDPConnections monitors conntrack for UDP connections
  55. func MonitorUDPConnections(channel *NonBlockingChan) {
  56. args := []string{
  57. "--buffer-size", "30000000",
  58. "-E",
  59. "-p", "udp",
  60. "-e", "ALL",
  61. }
  62. cmd := exec.Command("conntrack", args...)
  63. stderrPipe, err := cmd.StderrPipe()
  64. CheckError("", err)
  65. go func() {
  66. stderr := bufio.NewReader(stderrPipe)
  67. for {
  68. line, _, readErr := stderr.ReadLine()
  69. println("[*]", string(line))
  70. CheckError("", readErr)
  71. }
  72. }()
  73. stdoutPipe, err := cmd.StdoutPipe()
  74. CheckError("", err)
  75. stdout := bufio.NewReader(stdoutPipe)
  76. cmd.Start()
  77. var buffer bytes.Buffer
  78. for {
  79. frag, isPrefix, err := stdout.ReadLine()
  80. CheckError("", err)
  81. buffer.Write(frag)
  82. if !isPrefix {
  83. line := buffer.String()
  84. go func() {
  85. re := regexp.MustCompile(udpRegExp)
  86. str := re.FindStringSubmatch(line)
  87. channel.Send <- str
  88.  
  89. }()
  90. buffer.Reset()
  91. }
  92. }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement