//Currently, Only IPv4 Forge is supported
Currently, Only IPv4 Forge is supported
// Currently Only IPv4 Forge is supported
func TransmitSocket(src net.Addr, dst net.Addr) (net.Conn, error) {
	var fd int
	var err error
	fd, err = syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, 0)
	if err != nil {
		return nil, newError("failed to create fd").Base(err).AtWarning()
	}
	err = syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
	if err != nil {
		return nil, newError("failed to set resuse_addr").Base(err).AtWarning()
	}
	err = syscall.SetsockoptInt(fd, syscall.SOL_IP, syscall.IP_TRANSPARENT, 1)
	if err != nil {
		return nil, newError("failed to set transparent").Base(err).AtWarning()
	}
	ip := src.(*net.UDPAddr).IP.To4()
	var ip2 [4]byte
	copy(ip2[:], ip)
	srcaddr := syscall.SockaddrInet4{}
	srcaddr.Addr = ip2
	srcaddr.Port = src.(*net.UDPAddr).Port
	err = syscall.Bind(fd, &srcaddr)
	if err != nil {
		return nil, newError("failed to bind source address").Base(err).AtWarning()
	}
	ipd := dst.(*net.UDPAddr).IP.To4()
	var ip2d [4]byte
	copy(ip2d[:], ipd)
	dstaddr := syscall.SockaddrInet4{}
	dstaddr.Addr = ip2d
	dstaddr.Port = dst.(*net.UDPAddr).Port
	err = syscall.Connect(fd, &dstaddr)
	if err != nil {
		return nil, newError("failed to connect to source address").Base(err).AtWarning()
	}
	fdf := os.NewFile(uintptr(fd), "/dev/udp/")
	c, err := net.FileConn(fdf)
	if err != nil {
		return nil, newError("failed to create file conn").Base(err).AtWarning()
	}
	return c, nil
}
func TransmitSocket ( src net . Addr , dst net . Addr ) ( net . Conn , error ) { var fd int var err error fd , err = syscall . Socket ( syscall . AF_INET , syscall . SOCK_DGRAM , 0 ) if err != nil { return nil , newError ( " " ) . Base ( err ) . AtWarning ( ) } err = syscall . SetsockoptInt ( fd , syscall . SOL_SOCKET , syscall . SO_REUSEADDR , 1 ) if err != nil { return nil , newError ( " " ) . Base ( err ) . AtWarning ( ) } err = syscall . SetsockoptInt ( fd , syscall . SOL_IP , syscall . IP_TRANSPARENT , 1 ) if err != nil { return nil , newError ( " " ) . Base ( err ) . AtWarning ( ) } ip := src . ( * net . UDPAddr ) . IP . To4 ( ) var ip2 [ 4 ] byte copy ( ip2 [ : ] , ip ) srcaddr := syscall . SockaddrInet4 { } srcaddr . Addr = ip2 srcaddr . Port = src . ( * net . UDPAddr ) . Port err = syscall . Bind ( fd , & srcaddr ) if err != nil { return nil , newError ( " " ) . Base ( err ) . AtWarning ( ) } ipd := dst . ( * net . UDPAddr ) . IP . To4 ( ) var ip2d [ 4 ] byte copy ( ip2d [ : ] , ipd ) dstaddr := syscall . SockaddrInet4 { } dstaddr . Addr = ip2d dstaddr . Port = dst . ( * net . UDPAddr ) . Port err = syscall . Connect ( fd , & dstaddr ) if err != nil { return nil , newError ( " " ) . Base ( err ) . AtWarning ( ) } fdf := os . NewFile ( uintptr ( fd ) , " " ) c , err := net . FileConn ( fdf ) if err != nil { return nil , newError ( " " ) . Base ( err ) . AtWarning ( ) } return c , nil }
Currently, Only IPv4 Forge is supported
Currently Only IPv4 Forge is supported