Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "github.com/vishvananda/netns"
- "io/ioutil"
- "log"
- "net"
- "runtime"
- "sync"
- )
- func readInterfaces(wg *sync.WaitGroup) {
- fmt.Printf("Z gorutyny\n")
- _, err := ioutil.ReadFile("/proc/net/tcp")
- if err != nil {
- log.Fatalf("nie moge czytac net/tcp: %v", err)
- }
- ifaces, _ := net.Interfaces()
- for _, iff := range ifaces {
- fmt.Println(iff)
- }
- wg.Done()
- }
- func main() {
- var wg sync.WaitGroup
- wg.Add(1)
- go func(wg *sync.WaitGroup) {
- defer wg.Done()
- // Lock the OS Thread so we don't accidentally switch namespaces
- runtime.LockOSThread()
- defer runtime.UnlockOSThread()
- // Save the current network namespace
- origns, _ := netns.Get()
- defer origns.Close()
- ns, err := netns.GetFromName("box")
- if err != nil {
- log.Fatalf("GetFromName error: %v", err)
- }
- err = netns.Set(ns)
- if err != nil {
- log.Fatalf("Cant set ns: %v", err)
- }
- _, err = ioutil.ReadFile("/proc/net/tcp")
- if err != nil {
- log.Fatalf("nie moge czytac net/tcp: %v", err)
- }
- // Do something with the network namespace
- ifaces, _ := net.Interfaces()
- for _, iff := range ifaces {
- fmt.Println(iff)
- }
- fmt.Printf("Interfaces: %v\n", ifaces)
- // Switch back to the original namespace
- netns.Set(origns)
- }(&wg)
- wg.Wait()
- for i := 0; i < 10; i++ {
- wg.Add(1)
- go readInterfaces(&wg)
- wg.Wait()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement