Golang : syscall.Socket example
Just a comparison on how Golang code that utilize net
package looks like if implemented with syscall.Socket
example :
package main
import (
"fmt"
"net"
"os"
)
func main() {
service := "127.0.0.1"
protocol := "icmp"
IPAddr, err := net.ResolveIPAddr("ip4", service)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
IPconn, err := net.ListenIP("ip4:"+protocol, IPAddr)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
buffer := make([]byte, 1024)
for { // display the bytes read from IP connection
num, clientAddr, _ := IPconn.ReadFrom(buffer)
fmt.Println("Reading from : ", clientAddr)
fmt.Printf("% X\n", buffer[:num])
}
}
to
package main
import (
"fmt"
"os"
"syscall"
)
func main() {
fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_ICMP)
if err != nil {
fmt.Println(err)
}
file := os.NewFile(uintptr(fd), "")
for {
buffer := make([]byte, 1024)
num, _ := file.Read(buffer)
fmt.Printf("% X\n", buffer[:num])
}
}
References :
http://www.darkcoding.net/software/raw-sockets-in-go-link-layer/
https://www.socketloop.com/references/golang-net-fileconn-function-example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+13.5k Golang : Find network of an IP address
+13.1k Golang : Simple word wrap or line breaking example
+28.3k Golang : JQuery AJAX post data to server and send data back to client example
+22.6k Golang : Fix type interface{} has no field or no methods and type assertions example
+16.1k Golang : How to tell if a file is compressed either gzip or zip ?
+7.3k Golang : HTTP Server Example
+22.3k Find and replace a character in a string in Go
+11.3k Golang : 2 dimensional array example
+12.7k Golang : How to get year, month and day?
+18.8k Golang : Append content to a file
+8.9k Golang : Turn string or text file into slice example