你正在使用的Go版本是什么( go version
)?
$ go version
go version go1.11.5 darwin/amd64
这个问题在最新版本中是否会重现?
是的
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/rhuang/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/rhuang/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/Cellar/go/1.11.5/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.11.5/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/xy/qpsgj2816g97b0ctzkq0ps_r0000gs/T/go-build097375093=/tmp/go-build -gno-record-gcc-switches -fno-common"
你做了什么?
使用x/net/ipv4/header对IPv4 IP头部进行编组,但我得到的是小端字节序而不是大端字节序。
你期望看到什么?
得到大端字节序的IP头部长度。
你实际上看到了什么?
小端字节序。
查看代码https://github.com/golang/net/blob/master/ipv4/header.go#L71,对于darwin(苹果),32位/64位操作系统应该有不同的转换。
Darwin amd64是小端字节序,它应该进行转换。
5条答案
按热度按时间hiz5n14c1#
/cc @mikioh
dsf9zpds2#
你能给我们展示一个我们可以用于重现问题的自包含程序吗?
ep6jt1vc3#
这是一个重新创建问题的程序。$x_{1e0f1}^{x}$
bvjveswy4#
@gopherbot add "help wanted"
@gopherbot add OS-Darwin
cc @odeke-em
uz75evzq5#
你可以看到这个答案:https://stackoverflow.com/a/15881825/13019406
这是BSD和OSX的特性,golang应该直接从sock中读取它。
你应该使用
ipv4.ParseHeader
来解析原始字节,而不是让golang修改为大端IP头长度。