当前位置: 首页>>代码示例>>Golang>>正文


Golang syscall.SockaddrInet4类代码示例

本文整理汇总了Golang中syscall.SockaddrInet4的典型用法代码示例。如果您正苦于以下问题:Golang SockaddrInet4类的具体用法?Golang SockaddrInet4怎么用?Golang SockaddrInet4使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了SockaddrInet4类的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: anyToSockaddr

//Copy from golang source
func anyToSockaddr(rsa *syscall.RawSockaddrAny) (syscall.Sockaddr, error) {
	switch rsa.Addr.Family {
	case syscall.AF_INET:
		pp := (*syscall.RawSockaddrInet4)(unsafe.Pointer(rsa))
		sa := new(syscall.SockaddrInet4)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		for i := 0; i < len(sa.Addr); i++ {
			sa.Addr[i] = pp.Addr[i]
		}
		return sa, nil

	case syscall.AF_INET6:
		pp := (*syscall.RawSockaddrInet6)(unsafe.Pointer(rsa))
		sa := new(syscall.SockaddrInet6)
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
		sa.Port = int(p[0])<<8 + int(p[1])
		sa.ZoneId = pp.Scope_id
		for i := 0; i < len(sa.Addr); i++ {
			sa.Addr[i] = pp.Addr[i]
		}
		return sa, nil
	}
	return nil, syscall.EAFNOSUPPORT
}
开发者ID:jannson,项目名称:gotproxytest,代码行数:26,代码来源:udp_tproxy.go

示例2: getSockaddr

func getSockaddr(network, addr string) (sa syscall.Sockaddr, soType int, err error) {
	// TODO: add support for tcp networks.

	if network != "tcp4" && network != "tcp6" {
		return nil, -1, errors.New("only tcp4 and tcp6 network is supported")
	}

	tcpAddr, err := net.ResolveTCPAddr(network, addr)
	if err != nil {
		return nil, -1, err
	}

	switch network {
	case "tcp4":
		var sa4 syscall.SockaddrInet4
		sa4.Port = tcpAddr.Port
		copy(sa4.Addr[:], tcpAddr.IP.To4())
		return &sa4, syscall.AF_INET, nil
	case "tcp6":
		var sa6 syscall.SockaddrInet6
		sa6.Port = tcpAddr.Port
		copy(sa6.Addr[:], tcpAddr.IP.To16())
		if tcpAddr.Zone != "" {
			ifi, err := net.InterfaceByName(tcpAddr.Zone)
			if err != nil {
				return nil, -1, err
			}
			sa6.ZoneId = uint32(ifi.Index)
		}
		return &sa6, syscall.AF_INET6, nil
	default:
		return nil, -1, errors.New("Unknown network type " + network)
	}
}
开发者ID:stellar,项目名称:bridge-server,代码行数:34,代码来源:reuseport.go

示例3: createEncapListener

func createEncapListener(ip net.IP, port int) (int, error) {
	const (
		UDP_ENCAP          = 100
		UDP_ENCAP_ESPINUDP = 2
	)
	s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, 0)
	if err != nil {
		return 0, err
	}
	err = syscall.SetsockoptInt(s, syscall.IPPROTO_UDP, UDP_ENCAP, UDP_ENCAP_ESPINUDP)
	if err != nil {
		return 0, err
	}
	var family int
	if len(ip) <= net.IPv4len {
		family = syscall.AF_INET
	} else if ip.To4() != nil {
		family = syscall.AF_INET
	} else {
		family = syscall.AF_INET6
	}
	var bindaddr syscall.Sockaddr
	switch family {
	case syscall.AF_INET:
		if len(ip) == 0 {
			ip = net.IPv4zero
		}
		sa := new(syscall.SockaddrInet4)
		for i := 0; i < net.IPv4len; i++ {
			sa.Addr[i] = ip[i]
		}
		sa.Port = port
		bindaddr = sa
	case syscall.AF_INET6:
		sa := new(syscall.SockaddrInet6)
		for i := 0; i < net.IPv6len; i++ {
			sa.Addr[i] = ip[i]
		}
		sa.Port = port
		// TODO: optionally allow zone for ipv6
		// sa.ZoneId = uint32(zoneToInt(zone))
		bindaddr = sa
	}
	err = syscall.Bind(s, bindaddr)
	if err != nil {
		return 0, err
	}
	return s, nil
}
开发者ID:vishvananda,项目名称:wormhole,代码行数:49,代码来源:tunnel.go

示例4: getSockaddr

func getSockaddr(network, addr string) (sa syscall.Sockaddr, soType int, err error) {
	// TODO: add support for tcp and tcp6 networks.

	if network != "tcp4" {
		return nil, -1, errors.New("only tcp4 network is supported")
	}

	tcpAddr, err := net.ResolveTCPAddr(network, addr)
	if err != nil {
		return nil, -1, err
	}

	var sa4 syscall.SockaddrInet4
	sa4.Port = tcpAddr.Port
	copy(sa4.Addr[:], tcpAddr.IP.To4())
	return &sa4, syscall.AF_INET, nil
}
开发者ID:adamzy,项目名称:fasthttp,代码行数:17,代码来源:reuseport.go

示例5: doSendThread

func doSendThread(conn int) {

	for data := range chanSend {

		dstIP := data.addr.IP.To4()
		if dstIP == nil {
			log.Println("send fail: no dest ip")
			continue
		}

		addr := syscall.SockaddrInet4{}
		addr.Port = 0
		addr.Addr[0], addr.Addr[1], addr.Addr[2], addr.Addr[3] = dstIP[0], dstIP[1], dstIP[2], dstIP[3]

		err := syscall.Sendto(conn, data.data, 0, &addr)

		if err != nil {
			log.Println("Send Thread ", err, data.addr.String())
			continue
		}
	}
}
开发者ID:adoyee,项目名称:probe,代码行数:22,代码来源:send.go

示例6: ipToSockaddr

func ipToSockaddr(family int, ip IP, port int, zone string) (syscall.Sockaddr, error) {
	switch family {
	case syscall.AF_INET:
		if len(ip) == 0 {
			ip = IPv4zero
		}
		if ip = ip.To4(); ip == nil {
			return nil, InvalidAddrError("non-IPv4 address")
		}
		sa := new(syscall.SockaddrInet4)
		for i := 0; i < IPv4len; i++ {
			sa.Addr[i] = ip[i]
		}
		sa.Port = port
		return sa, nil
	case syscall.AF_INET6:
		if len(ip) == 0 {
			ip = IPv6zero
		}
		// IPv4 callers use 0.0.0.0 to mean "announce on any available address".
		// In IPv6 mode, Linux treats that as meaning "announce on 0.0.0.0",
		// which it refuses to do.  Rewrite to the IPv6 unspecified address.
		if ip.Equal(IPv4zero) {
			ip = IPv6zero
		}
		if ip = ip.To16(); ip == nil {
			return nil, InvalidAddrError("non-IPv6 address")
		}
		sa := new(syscall.SockaddrInet6)
		for i := 0; i < IPv6len; i++ {
			sa.Addr[i] = ip[i]
		}
		sa.Port = port
		sa.ZoneId = uint32(zoneToInt(zone))
		return sa, nil
	}
	return nil, InvalidAddrError("unexpected socket family")
}
开发者ID:pkdevboxy,项目名称:appscale,代码行数:38,代码来源:ipsock_posix.go

示例7: ipToSockaddr

func ipToSockaddr(family int, ip IP, port int) (syscall.Sockaddr, os.Error) {
	switch family {
	case syscall.AF_INET:
		if len(ip) == 0 {
			ip = IPv4zero
		}
		if ip = ip.To4(); ip == nil {
			return nil, os.EINVAL
		}
		s := new(syscall.SockaddrInet4)
		for i := 0; i < IPv4len; i++ {
			s.Addr[i] = ip[i]
		}
		s.Port = port
		return s, nil
	case syscall.AF_INET6:
		if len(ip) == 0 {
			ip = IPzero
		}
		// IPv4 callers use 0.0.0.0 to mean "announce on any available address".
		// In IPv6 mode, Linux treats that as meaning "announce on 0.0.0.0",
		// which it refuses to do.  Rewrite to the IPv6 all zeros.
		if p4 := ip.To4(); p4 != nil && p4[0] == 0 && p4[1] == 0 && p4[2] == 0 && p4[3] == 0 {
			ip = IPzero
		}
		if ip = ip.To16(); ip == nil {
			return nil, os.EINVAL
		}
		s := new(syscall.SockaddrInet6)
		for i := 0; i < IPv6len; i++ {
			s.Addr[i] = ip[i]
		}
		s.Port = port
		return s, nil
	}
	return nil, os.EINVAL
}
开发者ID:lougxing,项目名称:golang-china,代码行数:37,代码来源:ipsock.go

示例8: run

func (w *Worker) run() {

	for i := 0; ; i++ {
		/* Make tcp Packet */
		tcpMaker := new(TCPmaker)
		tcpMaker.DestAddr = w.nowDestAddr
		tcpMaker.DestPort = w.nowDestPort
		tcpMaker.SourceAddr = w.SourceAddr
		if w.IsRandomSrcPort {
			tcpMaker.SourcePort = uint16(getFreePort())
		} else {
			tcpMaker.SourcePort = w.SourcePort
		}
		PacketLen := tcpMaker.GetPacketLen()
		Packet := make([]byte, PacketLen)
		buf := tcpMaker.MakePacket(SYN)
		copy(Packet, buf)

		RemoteAddr := new(syscall.SockaddrInet4)
		InetIPAddr := tcpMaker.GetInetDestIPAddr()
		destAddr := unsafe.Pointer(&InetIPAddr)
		byteAddr := (*[4]byte)(destAddr)
		RemoteAddr.Addr[0] = byteAddr[0]
		RemoteAddr.Addr[1] = byteAddr[1]
		RemoteAddr.Addr[2] = byteAddr[2]
		RemoteAddr.Addr[3] = byteAddr[3]
		RemoteAddr.Port = int(tcpMaker.GetlittleEndianDestPort())

		socket := w.createRawSocket()
		//fmt.Printf("%d sendpacket,port :%d \n", i, w.nowDestPort)
		w.sendPacket(Packet, RemoteAddr, socket)
		RecvBuf, RecvLen := w.recvPacket(socket)
		if RecvLen == 44 && w.check(RecvBuf) {

			Openned_Port := parseSrcPortFromRecvBuf(RecvBuf)
			Openned_Addr := parseSrcAddrFromRecvBuf(RecvBuf)
			DstAddr := parseDstAddrFromRecvBuf(RecvBuf)
			if DstAddr == w.SourceAddr {
				fmt.Printf("IP :%s \t\t Port :%s \t\t is open \n", Openned_Addr, Openned_Port)
				//sendRSTPacket(tcpMaker, RemoteAddr, socket)

			}
			syscall.Close(socket)

		} else {
			//fmt.Printf("IP :%s Port :%d \t is not open \n", w.nowDestAddr, w.nowDestPort)
			syscall.Close(socket)
		}

		NextIP, NextPort := w.nextTask()

		//fmt.Printf("NextIP %s NextPort %d\n", NextIP, NextPort)

		if NextIP == "" && 0 == NextPort {
			//w.notify <- 1
			break
		} else {
			w.setNowIPAddr(NextIP)
			w.setNowPort(NextPort)
		}
	}
}
开发者ID:DefinitlyEvil,项目名称:GoSYN_Unix,代码行数:62,代码来源:worker.go


注:本文中的syscall.SockaddrInet4类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。