捕获 NGAP 消息
作者: mrramachari创建于 2024年3月25日更新于 2026年1月6日
func main() { // Check if file argument is provided if len(os.Args) < 2 { fmt.Println("Please provide a pcap file to read") os.Exit(1) }
// Open up the pcap file for reading
handle, err := pcap.OpenOffline(os.Args[1])
if err != nil {
log.Fatal(err)
}
defer handle.Close()
// Loop through packets in file
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
for packet := range packetSource.Packets() {
// Print the packet details
// fmt.Println(packet.String())
// // Extract and print the Ethernet layer
// ethLayer := packet.Layer(layers.LayerTypeEthernet)
// if ethLayer != nil {
// ethPacket, _ := ethLayer.(*layers.Ethernet)
// fmt.Println("Ethernet source MAC address:", ethPacket.SrcMAC)
// fmt.Println("Ethernet destination MAC address:", ethPacket.DstMAC)
// }
// // Extract and print the IP layer
// ipLayer := packet.Layer(layers.LayerTypeIPv4)
// if ipLayer != nil {
// ipPacket, _ := ipLayer.(*layers.IPv4)
// fmt.Println("IP source address:", ipPacket.SrcIP)
// fmt.Println("IP destination address:", ipPacket.DstIP)
// }
// Extract and check for SCTP layer
sctpLayer := packet.Layer(layers.LayerTypeSCTP)
if sctpLayer != nil {
fmt.Println("SCTP Packet:")
fmt.Println(packet.String())
continue // Skip further processing for this packet
}
// // Extract and check for GTP layer
// gtpLayer := packet.Layer(layers.LayerTypeGTP)
// if gtpLayer != nil {
// fmt.Println("GTP Packet:")
// fmt.Println(packet.String())
// continue // Skip further processing for this packet
// }
ngapLayer := packet.Layer(layers.LayerTypeGTPv1U)
if ngapLayer != nil {
fmt.Println("GTPv1U Message:")
fmt.Println(packet.String())
continue // Skip further processing for this packet
}
}
}
内容来源: google/gopacket