Golang Go语言中如何获取包的原IP跟目标IP?
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连接。LocalAddr
和RemoteAddr
方法分别返回本地和远程的地址信息,这些信息被转换为*net.TCPAddr
类型以访问IP地址。
对于UDP连接,过程类似,只需将net.Dial
替换为net.ListenUDP
或net.DialUDP
,并相应地处理连接。
请注意,获取到的IP地址可能是IPv4或IPv6,具体取决于网络配置和连接类型。如果需要处理这两种情况,可以使用类型断言或类型开关来区分。