How to use Forward method of gvisor Package

Best Syzkaller code snippet using gvisor.Forward

stack.go

Source:stack.go Github

copy

Full Screen

...46 if t.IsTCP() {47 t.GetTCP().Request.Complete(reset)48 }49}50// TCPConn represents a TCP Forwarder connection51type TCPConn struct {52 EndpointID stack.TransportEndpointID53 Request *tcp.ForwarderRequest54}55// UDPConn represents a UDP Forwarder connection56type UDPConn struct {57 EndpointID stack.TransportEndpointID58 Request *udp.ForwarderRequest59}60// ICMPConn represents a ICMP Packet Buffer61type ICMPConn struct {62 Request *stack.PacketBuffer63}64// NetStack is the structure used to store the connection pool and the gvisor network stack65type NetStack struct {66 pool *ConnPool67 stack *stack.Stack68 sync.Mutex69}70type StackSettings struct {71 TunName string72 MaxInflight int73}74// NewStack registers a new GVisor Network Stack75func NewStack(settings StackSettings, connPool *ConnPool) *NetStack {76 ns := NetStack{pool: connPool}77 ns.new(settings)78 return &ns79}80// GetStack returns the current Gvisor stack.Stack object81func (s *NetStack) GetStack() *stack.Stack {82 return s.stack83}84// SetConnPool is used to change the current connPool. It must be used after switching Ligolo agents85func (s *NetStack) SetConnPool(connPool *ConnPool) {86 s.Lock()87 s.pool = connPool88 s.Unlock()89}90// New creates a new userland network stack (using Gvisor) that listen on a tun interface.91func (s *NetStack) new(stackSettings StackSettings) *stack.Stack {92 // Create a new gvisor userland network stack.93 ns := stack.New(stack.Options{94 NetworkProtocols: []stack.NetworkProtocolFactory{95 ipv4.NewProtocol,96 ipv6.NewProtocol,97 },98 TransportProtocols: []stack.TransportProtocolFactory{99 tcp.NewProtocol,100 udp.NewProtocol,101 icmp.NewProtocol4,102 icmp.NewProtocol6,103 },104 HandleLocal: false,105 })106 s.stack = ns107 // Gvisor Hack: Disable ICMP handling.108 ns.SetICMPLimit(0)109 ns.SetICMPBurst(0)110 // Forward TCP connections111 tcpHandler := tcp.NewForwarder(ns, 0, stackSettings.MaxInflight, func(request *tcp.ForwarderRequest) {112 tcpConn := TCPConn{113 EndpointID: request.ID(),114 Request: request,115 }116 s.Lock()117 defer s.Unlock()118 if s.pool == nil || s.pool.Closed() {119 return // If connPool is closed, ignore packet.120 }121 if err := s.pool.Add(TunConn{122 tcp.ProtocolNumber,123 tcpConn,124 }); err != nil {125 logrus.Error(err)126 }127 })128 // Forward UDP connections129 udpHandler := udp.NewForwarder(ns, func(request *udp.ForwarderRequest) {130 udpConn := UDPConn{131 EndpointID: request.ID(),132 Request: request,133 }134 s.Lock()135 defer s.Unlock()136 if s.pool == nil || s.pool.Closed() {137 return // If connPool is closed, ignore packet.138 }139 if err := s.pool.Add(TunConn{140 udp.ProtocolNumber,141 udpConn,142 }); err != nil {143 logrus.Error(err)144 }145 })146 // Register forwarders147 ns.SetTransportProtocolHandler(tcp.ProtocolNumber, tcpHandler.HandlePacket)148 ns.SetTransportProtocolHandler(udp.ProtocolNumber, udpHandler.HandlePacket)149 linkEP, err := tun.Open(stackSettings.TunName)150 if err != nil {151 logrus.Fatalf("unable to create tun interface: (tun.Open %v), make sure you created the tun interface", err)152 }153 // Create a new NIC154 if err := ns.CreateNIC(1, linkEP); err != nil {155 panic(fmt.Errorf("CreateNIC: %v", err))156 }157 // Start a endpoint that will reply to ICMP echo queries158 if err := icmpResponder(s); err != nil {159 logrus.Fatal(err)160 }161 // Allow all routes by default162 ns.SetRouteTable([]tcpip.Route{163 {164 Destination: header.IPv4EmptySubnet,165 NIC: 1,166 },167 {168 Destination: header.IPv6EmptySubnet,169 NIC: 1,170 },171 })172 // Enable forwarding173 ns.SetForwardingDefaultAndAllNICs(ipv4.ProtocolNumber, false)174 ns.SetForwardingDefaultAndAllNICs(ipv6.ProtocolNumber, false)175 // Enable TCP SACK176 nsacks := tcpip.TCPSACKEnabled(false)177 ns.SetTransportProtocolOption(tcp.ProtocolNumber, &nsacks)178 // Disable SYN-Cookies, as this can mess with nmap scans179 synCookies := tcpip.TCPAlwaysUseSynCookies(false)180 ns.SetTransportProtocolOption(tcp.ProtocolNumber, &synCookies)181 // Allow packets from all sources/destinations182 ns.SetPromiscuousMode(1, true)183 ns.SetSpoofing(1, true)184 return ns185}...

Full Screen

Full Screen

tun2socks.go

Source:tun2socks.go Github

copy

Full Screen

...26 return27 }28 sock5Addr = _sock5Addr29 tunDNS = _tunDNS30 ForwardTransportFromIo(dev, mtu, rawTcpForwarder, rawUdpForwarder)31}32func rawTcpForwarder(conn core.CommTCPConn) error {33 defer conn.Close()34 socksConn, err1 := net.Dial("tcp", sock5Addr)35 if err1 != nil {36 log.Println(err1)37 return nil38 }39 defer socksConn.Close()40 if socks.SocksCmd(socksConn, 1, conn.LocalAddr().String()) == nil {41 go io.Copy(conn, socksConn)42 io.Copy(socksConn, conn)43 }44 return nil45}46func rawUdpForwarder(conn core.CommUDPConn, ep core.CommEndpoint) error {47 defer conn.Close()48 //dns port49 if strings.HasSuffix(conn.LocalAddr().String(), ":53") {50 dnsReq(conn, "udp", tunDNS)51 }52 return nil53}54func ForwardTransportFromIo(dev io.ReadWriteCloser, mtu int, tcpCallback core.ForwarderCall, udpCallback core.UdpForwarderCall) error {55 _, channelLinkID, err := core.NewDefaultStack(mtu, tcpCallback, udpCallback)56 if err != nil {57 log.Printf("err:%v", err)58 return err59 }60 ctx, cancel := context.WithCancel(context.Background())61 defer cancel()62 // write tun63 go func(_ctx context.Context) {64 for {65 info := channelLinkID.ReadContext(_ctx)66 if info == nil {67 log.Printf("channelLinkID exit \r\n")68 break...

Full Screen

Full Screen

Forward

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 s := stack.New([]string{ipv4.ProtocolName, ipv6.ProtocolName}, []string{tcp.ProtocolName, udp.ProtocolName, icmp.ProtocolName4, icmp.ProtocolName6, raw.ProtocolName4, raw.ProtocolName6}, stack.Options{})4 nicID := s.CreateNIC(1, loopback.New())5 s.AddAddress(nicID, ipv4.ProtocolNumber, "\x0a\x00\x00\x01")6 s.AddAddress(nicID, ipv6.ProtocolNumber, "\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01")7 r, err := s.FindRoute(nicID, "", "\x0a\x00\x00\x02", ipv4.ProtocolNumber, false)8 if err != nil {9 panic(err)10 }11 pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{12 Data: buffer.View([]byte("Hello World")).ToVectorisedView(),13 })14 hdr := buffer.NewPrependableFromView(buffer.View(icmpEchoRequest(header.ICMPv4MinimumSize)))15 err = r.Forward(pkt, hdr, header.ICMP

Full Screen

Full Screen

Forward

Using AI Code Generation

copy

Full Screen

1func main() {2 gvisor := gvisor.NewGVisor()3 gvisor.Forward()4}5func main() {6 gvisor := gvisor.NewGVisor()7 gvisor.Forward()8}9func main() {10 gvisor := gvisor.NewGVisor()11 gvisor.Forward()12}13func main() {14 gvisor := gvisor.NewGVisor()15 gvisor.Forward()16}17func main() {18 gvisor := gvisor.NewGVisor()19 gvisor.Forward()20}21func main() {22 gvisor := gvisor.NewGVisor()23 gvisor.Forward()24}25func main() {26 gvisor := gvisor.NewGVisor()27 gvisor.Forward()28}29func main() {30 gvisor := gvisor.NewGVisor()31 gvisor.Forward()32}33func main() {34 gvisor := gvisor.NewGVisor()35 gvisor.Forward()36}37func main() {38 gvisor := gvisor.NewGVisor()39 gvisor.Forward()40}41func main() {42 gvisor := gvisor.NewGVisor()43 gvisor.Forward()44}45func main() {46 gvisor := gvisor.NewGVisor()47 gvisor.Forward()48}49func main() {50 gvisor := gvisor.NewGVisor()

Full Screen

Full Screen

Forward

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 g, err := gvisor.New()4 if err != nil {5 fmt.Println("Error in creating gvisor object")6 }7 l, err := net.Listen("tcp", "localhost:10000")8 if err != nil {9 fmt.Println("Error in creating TCP listener")10 }11 err = g.Forward(l)12 if err != nil {13 fmt.Println("Error in forwarding the TCP listener")14 }15 for {16 c, err := l.Accept()17 if err != nil {18 fmt.Println("Error in accepting a connection")19 }20 go handleConnection(c)21 }22}23func handleConnection(c net.Conn) {24 for {25 buf := make([]byte, 1024)26 n, err := c.Read(buf)27 if err != nil {28 fmt.Println("Error in reading data from TCP connection")29 }30 _, err = c.Write(buf[:n])31 if err != nil {32 fmt.Println("Error in writing data to TCP connection")33 }34 }35}36import (37func main() {38 g, err := gvisor.New()39 if err != nil {40 fmt.Println("Error in creating gvisor object")41 }42 l, err := g.Listen("tcp", "localhost:10000")43 if err != nil {44 fmt.Println("Error in listening on a TCP port")45 }46 for {47 c, err := l.Accept()48 if err != nil {49 fmt.Println("Error in accepting a connection")50 }

Full Screen

Full Screen

Forward

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 g.Forward()4 fmt.Printf("Main method")5}6import (7func main() {8 g.Forward()9 fmt.Printf("Main method")10}11import (12func main() {13 g.Forward()14 fmt.Printf("Main method")15}16import (17func main() {18 g.Forward()19 fmt.Printf("Main method")20}21import (22func main() {23 g.Forward()24 fmt.Printf("Main method")25}26import (27func main() {28 g.Forward()29 fmt.Printf("Main method")30}31import (32func main() {33 g.Forward()34 fmt.Printf("Main method")35}36import (37func main() {38 g.Forward()39 fmt.Printf("Main method")40}41import (42func main() {43 g.Forward()44 fmt.Printf("Main method")45}46import (47func main() {

Full Screen

Full Screen

Forward

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 gvisor := mygvisor.NewGvisor()4 gvisor.Forward()5 fmt.Println("Hello World")6}7import (8func main() {9 gvisor := mygvisor.NewGvisor()10 gvisor.Forward()11 fmt.Println("Hello World")12}13import (14func main() {15 gvisor := mygvisor.NewGvisor()16 gvisor.Forward()17 fmt.Println("Hello World")18}19import (20func main() {21 gvisor := mygvisor.NewGvisor()22 gvisor.Forward()23 fmt.Println("Hello World")24}25import (26func main() {27 gvisor := mygvisor.NewGvisor()28 gvisor.Forward()29 fmt.Println("Hello World")30}31import (32func main() {33 gvisor := mygvisor.NewGvisor()34 gvisor.Forward()35 fmt.Println("Hello World")36}37import (38func main() {39 gvisor := mygvisor.NewGvisor()40 gvisor.Forward()41 fmt.Println("Hello World")42}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Syzkaller automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful