#1160·gopacket

捕获 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