mirror of
				https://github.com/maride/pancap.git
				synced 2025-10-10 19:36:51 +00:00 
			
		
		
		
	Init commit: open file and print link type
This commit is contained in:
		
						commit
						daa3cfd812
					
				
							
								
								
									
										20
									
								
								src/analyzer.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/analyzer.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/google/gopacket"
 | 
			
		||||
	"github.com/google/gopacket/layers"
 | 
			
		||||
	"log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Analyzes the given packet source
 | 
			
		||||
func analyzePCAP(source *gopacket.PacketSource, linkType layers.LinkType) error {
 | 
			
		||||
	log.Printf("PCAP capture link type is %s (ID %d)", getNameOfLinkType(linkType), linkType)
 | 
			
		||||
	// TODO: maybe, just maybe, we wanna print more here than just the link type :)
 | 
			
		||||
	_, _ = source, linkType
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the name of the LinkType constant handed over
 | 
			
		||||
func getNameOfLinkType(lt layers.LinkType) string {
 | 
			
		||||
	return lt.String()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								src/file.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/file.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"github.com/google/gopacket"
 | 
			
		||||
	"github.com/google/gopacket/layers"
 | 
			
		||||
	"github.com/google/gopacket/pcap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	filenameFlag *string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Registers the flag --file
 | 
			
		||||
func registerFileFlags() {
 | 
			
		||||
	filenameFlag = flag.String("file", "", "PCAP file to base analysis on")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Opens the PCAP, returns its packets and the link type or an error
 | 
			
		||||
func openPCAP() (*gopacket.PacketSource, layers.LinkType, error) {
 | 
			
		||||
	// Open specified file
 | 
			
		||||
	handle, openErr := pcap.OpenOffline(*filenameFlag)
 | 
			
		||||
	if openErr != nil {
 | 
			
		||||
		// There were some problems opening the file
 | 
			
		||||
		return nil, 0, openErr
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Open given handle as packet source and return it
 | 
			
		||||
	packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
 | 
			
		||||
	return packetSource, handle.LinkType(), nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								src/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/main.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	// important things first
 | 
			
		||||
	printMOTD()
 | 
			
		||||
 | 
			
		||||
	// register flags
 | 
			
		||||
	registerFileFlags()
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	// Open the given PCAP
 | 
			
		||||
	packetSource, linkType, fileErr := openPCAP()
 | 
			
		||||
	if fileErr != nil {
 | 
			
		||||
		// Encountered problems with the PCAP - permission and/or existance error
 | 
			
		||||
		log.Fatalf("Error occured while opeining specified file: %s", fileErr.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Start analyzing
 | 
			
		||||
	analyzeErr := analyzePCAP(packetSource, linkType)
 | 
			
		||||
	if analyzeErr != nil {
 | 
			
		||||
		// Mh, encountered some problems while analyzingfil
 | 
			
		||||
		log.Fatalf("Error occurred while analyzing: %s", analyzeErr.Error())
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Prints a simple figlet-style ASCII art
 | 
			
		||||
func printMOTD() {
 | 
			
		||||
	fmt.Println(" _ __   __ _ _ __   ___ __ _ _ __")
 | 
			
		||||
	fmt.Println("| '_ \\ / _` | '_ \\ / __/ _` | '_ \\")
 | 
			
		||||
	fmt.Println("| |_) | (_| | | | | (_| (_| | |_) |")
 | 
			
		||||
	fmt.Println("| .__/ \\__,_|_| |_|\\___\\__,_| .__/")
 | 
			
		||||
	fmt.Println("|_|                         |_|")
 | 
			
		||||
	fmt.Println("PanCAP: Analyzer for capture files\n")
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user