Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "github.com/vishvananda/netns"
  6. "io/ioutil"
  7. "log"
  8. "net"
  9. "runtime"
  10. "sync"
  11. )
  12.  
  13. func readInterfaces(wg *sync.WaitGroup) {
  14. fmt.Printf("Z gorutyny\n")
  15. _, err := ioutil.ReadFile("/proc/net/tcp")
  16. if err != nil {
  17. log.Fatalf("nie moge czytac net/tcp: %v", err)
  18. }
  19.  
  20. ifaces, _ := net.Interfaces()
  21. for _, iff := range ifaces {
  22. fmt.Println(iff)
  23. }
  24.  
  25. wg.Done()
  26.  
  27. }
  28. func main() {
  29. var wg sync.WaitGroup
  30. wg.Add(1)
  31. go func(wg *sync.WaitGroup) {
  32. defer wg.Done()
  33. // Lock the OS Thread so we don't accidentally switch namespaces
  34. runtime.LockOSThread()
  35. defer runtime.UnlockOSThread()
  36.  
  37. // Save the current network namespace
  38. origns, _ := netns.Get()
  39. defer origns.Close()
  40.  
  41. ns, err := netns.GetFromName("box")
  42. if err != nil {
  43. log.Fatalf("GetFromName error: %v", err)
  44. }
  45.  
  46. err = netns.Set(ns)
  47. if err != nil {
  48. log.Fatalf("Cant set ns: %v", err)
  49. }
  50.  
  51. _, err = ioutil.ReadFile("/proc/net/tcp")
  52. if err != nil {
  53. log.Fatalf("nie moge czytac net/tcp: %v", err)
  54. }
  55.  
  56. // Do something with the network namespace
  57. ifaces, _ := net.Interfaces()
  58. for _, iff := range ifaces {
  59. fmt.Println(iff)
  60. }
  61. fmt.Printf("Interfaces: %v\n", ifaces)
  62.  
  63. // Switch back to the original namespace
  64. netns.Set(origns)
  65. }(&wg)
  66.  
  67. wg.Wait()
  68.  
  69. for i := 0; i < 10; i++ {
  70. wg.Add(1)
  71. go readInterfaces(&wg)
  72. wg.Wait()
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement