代码拉取完成,页面将自动刷新
package jokode
import (
"fmt"
"github.com/pkg/errors"
"net"
"strconv"
"strings"
"time"
)
func ParseAddr(addr string) (host string, port int, err error) {
idx := strings.LastIndexByte(addr, ':')
portStr := "0"
if idx > 0 {
host = addr[:idx]
portStr = addr[idx+1:]
} else {
host = addr
}
if port, err = strconv.Atoi(portStr); err != nil {
return "", -1, errors.Wrapf(err, "try convert port info '%s' to number fail", portStr)
} else {
return host, port, nil
}
}
func GetLocalIpByRemoteTcp(remoteHost string, remotePort uint64, timeOut time.Duration) (net.IP, error) {
var connObj net.Conn
defer func() {
if connObj != nil {
if err := connObj.Close(); err != nil {
Logger().Errorf("try close tcp connection fail, error info: %v", err)
}
connObj = nil
}
}()
if conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", remoteHost, remotePort), timeOut); err != nil {
return nil, errors.Wrapf(err, "try connect remote addr '%s:%d' fail", remoteHost, remotePort)
} else {
localAddrStr := conn.LocalAddr().String()
if localAddr, err2 := net.ResolveTCPAddr("tcp", localAddrStr); err2 != nil {
return nil, errors.Wrapf(err2, "try parse local addr '%s' fail", localAddrStr)
} else {
return localAddr.IP, nil
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。