Golang Go语言中如何获取包的原IP跟目标IP?

发布于 1周前 作者 caililin 来自 Go语言

Golang Go语言中如何获取包的原IP跟目标IP?
我现在只知道可以通过 pcap 来抓包,然后包里 ethernet.DstMAC.String()来获取目标的 MAC 地址。那如何可以拿到对应的 IP 呢?

5 回复

如果是用 Go 的话,Google 开发了一个包叫 gopacket,可以看一下

更多关于Golang Go语言中如何获取包的原IP跟目标IP?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


建议学习一下流量包的格式,一层层解开

#1 嗯嗯,正在使用这个。

#2 好,感谢你的建议。

在Golang中,要获取网络连接的原始IP(源IP)和目标IP,通常涉及到使用net包来处理网络连接。这可以通过操作TCP连接或者UDP连接来实现,具体取决于你的应用需求。

对于TCP连接,你可以使用net.TCPConn来获取本地地址(源IP)和远程地址(目标IP)。以下是一个简单的例子:

package main

import (
    "fmt"
    "net"
)

func main() {
    conn, err := net.Dial("tcp", "example.com:80")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    localAddr := conn.LocalAddr().(*net.TCPAddr)
    remoteAddr := conn.RemoteAddr().(*net.TCPAddr)

    fmt.Println("Local IP:", localAddr.IP)
    fmt.Println("Remote IP:", remoteAddr.IP)
}

在上面的代码中,net.Dial函数用于创建一个到指定地址的TCP连接。LocalAddrRemoteAddr方法分别返回本地和远程的地址信息,这些信息被转换为*net.TCPAddr类型以访问IP地址。

对于UDP连接,过程类似,只需将net.Dial替换为net.ListenUDPnet.DialUDP,并相应地处理连接。

请注意,获取到的IP地址可能是IPv4或IPv6,具体取决于网络配置和连接类型。如果需要处理这两种情况,可以使用类型断言或类型开关来区分。

回到顶部