X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fnncp%2Fcmd%2Fnncp-pkt%2Fmain.go;h=891298bf3ebde2f3b4d9077aba50f3050c91e39d;hb=535d386941ae38abbaa8e1a6df69a5e739058011;hp=b19665282097f38885fc753d35b32d2351c5d457;hpb=d1cd3a4bf2dac997edea5a76bccad6e0c9e2f65f;p=nncp.git diff --git a/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go b/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go index b196652..891298b 100644 --- a/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go +++ b/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go @@ -1,5 +1,5 @@ /* -NNCP -- Node-to-Node CoPy +NNCP -- Node to Node copy, utilities for store-and-forward data exchange Copyright (C) 2016-2017 Sergey Matveev This program is free software: you can redistribute it and/or modify @@ -22,33 +22,33 @@ package main import ( "bufio" "bytes" + "compress/zlib" "flag" "fmt" "io" - "io/ioutil" "log" "os" "cypherpunks.ru/nncp" "github.com/davecgh/go-xdr/xdr2" - "github.com/dustin/go-humanize" "golang.org/x/crypto/blake2b" ) func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) fmt.Fprintln(os.Stderr, "nncp-pkt -- parse raw packet\n") - fmt.Fprintln(os.Stderr, "Usage: %s [options]\nOptions:", os.Args[0]) + fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() fmt.Fprintln(os.Stderr, "Packet is read from stdin.") } func main() { var ( - dump = flag.Bool("dump", false, "Write decrypted/parsed payload to stdout") - cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") - version = flag.Bool("version", false, "Print version information") - warranty = flag.Bool("warranty", false, "Print warranty information") + dump = flag.Bool("dump", false, "Write decrypted/parsed payload to stdout") + decompress = flag.Bool("decompress", false, "Try to zlib decompress dumped data") + cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") + version = flag.Bool("version", false, "Print version information") + warranty = flag.Bool("warranty", false, "Print warranty information") ) flag.Usage = usage flag.Parse() @@ -62,7 +62,7 @@ func main() { } var err error - beginning := make([]byte, nncp.PktOverhead-blake2b.Size256) + beginning := make([]byte, nncp.PktOverhead-8-2*blake2b.Size256) if _, err = io.ReadFull(os.Stdin, beginning); err != nil { log.Fatalln("Not enough data to read") } @@ -71,7 +71,16 @@ func main() { if err == nil && pkt.Magic == nncp.MagicNNCPPv1 { if *dump { bufW := bufio.NewWriter(os.Stdout) - if _, err = io.Copy(bufW, bufio.NewReader(os.Stdin)); err != nil { + var r io.Reader + r = bufio.NewReader(os.Stdin) + if *decompress { + decompressor, err := zlib.NewReader(r) + if err != nil { + log.Fatalln(err) + } + r = decompressor + } + if _, err = io.Copy(bufW, r); err != nil { log.Fatalln(err) } if err = bufW.Flush(); err != nil { @@ -102,18 +111,17 @@ func main() { } var pktEnc nncp.PktEnc _, err = xdr.Unmarshal(bytes.NewReader(beginning), &pktEnc) - if err == nil && pktEnc.Magic == nncp.MagicNNCPEv1 { + if err == nil && pktEnc.Magic == nncp.MagicNNCPEv3 { if *dump { - cfgRaw, err := ioutil.ReadFile(*cfgPath) + ctx, err := nncp.CtxFromCmdline(*cfgPath, "", "", false, false) if err != nil { - log.Fatalln("Can not read config:", err) + log.Fatalln("Error during initialization:", err) } - ctx, err := nncp.CfgParse(cfgRaw) - if err != nil { - log.Fatalln("Can not parse config:", err) + if ctx.Self == nil { + log.Fatalln("Config lacks private keys") } bufW := bufio.NewWriter(os.Stdout) - if _, err = nncp.PktEncRead( + if _, _, err = nncp.PktEncRead( ctx.Self, ctx.Neigh, io.MultiReader( @@ -130,8 +138,8 @@ func main() { return } fmt.Printf( - "Packet type: encrypted\nNiceness: %d\nSender: %s\nPayload size: %s (%d bytes)\n", - pktEnc.Nice, pktEnc.Sender, humanize.IBytes(pktEnc.Size), pktEnc.Size, + "Packet type: encrypted\nNiceness: %d\nSender: %s\nRecipient: %s\n", + pktEnc.Nice, pktEnc.Sender, pktEnc.Recipient, ) return }