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=674381e222c43a67da6bab638b00e6c7f8741c91;hpb=4a4c1be88baf3fa5426bc1c9c96e104643155fca;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 674381e..891298b 100644 --- a/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go +++ b/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go @@ -22,16 +22,15 @@ 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" ) @@ -45,10 +44,11 @@ func usage() { 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 }