X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fnncp%2Fcmd%2Fnncp-pkt%2Fmain.go;h=bdb18ad0d6ff94b6c41be187b06cb888ef275185;hb=dd92823db3d72fb21a4c712a7fb052dce16443dd;hp=93759b69ee7037fca2984d42580fbd7bc2c1e13f;hpb=12536e329b4fb8d27e1e2a336e783ae0fc046e2f;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 93759b6..bdb18ad 100644 --- a/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go +++ b/src/cypherpunks.ru/nncp/cmd/nncp-pkt/main.go @@ -1,11 +1,10 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2017 Sergey Matveev +Copyright (C) 2016-2019 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -// Parse raw NNCP packet +// Parse raw NNCP packet. package main import ( @@ -26,18 +25,16 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "os" "cypherpunks.ru/nncp" "github.com/davecgh/go-xdr/xdr2" - "golang.org/x/crypto/blake2b" ) func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintln(os.Stderr, "nncp-pkt -- parse raw packet\n") + fmt.Fprintf(os.Stderr, "nncp-pkt -- parse raw packet\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() fmt.Fprintln(os.Stderr, "Packet is read from stdin.") @@ -45,6 +42,7 @@ func usage() { func main() { var ( + overheads = flag.Bool("overheads", false, "Print packet overheads") 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") @@ -62,14 +60,24 @@ func main() { return } + if *overheads { + fmt.Printf( + "Plain: %d\nEncrypted: %d\nSize: %d\n", + nncp.PktOverhead, + nncp.PktEncOverhead, + nncp.PktSizeOverhead, + ) + return + } + var err error - beginning := make([]byte, nncp.PktOverhead-8-2*blake2b.Size256) + beginning := make([]byte, nncp.PktOverhead) if _, err = io.ReadFull(os.Stdin, beginning); err != nil { log.Fatalln("Not enough data to read") } var pkt nncp.Pkt _, err = xdr.Unmarshal(bytes.NewReader(beginning), &pkt) - if err == nil && pkt.Magic == nncp.MagicNNCPPv1 { + if err == nil && pkt.Magic == nncp.MagicNNCPPv2 { if *dump { bufW := bufio.NewWriter(os.Stdout) var r io.Reader @@ -95,32 +103,38 @@ func main() { payloadType = "file" case nncp.PktTypeFreq: payloadType = "file request" - case nncp.PktTypeMail: - payloadType = "mail" + case nncp.PktTypeExec: + payloadType = "exec" case nncp.PktTypeTrns: payloadType = "transitional" } var path string switch pkt.Type { + case nncp.PktTypeExec: + path = string(bytes.Replace( + pkt.Path[:pkt.PathLen], + []byte{0}, + []byte(" "), + -1, + )) case nncp.PktTypeTrns: path = nncp.ToBase32(pkt.Path[:pkt.PathLen]) default: path = string(pkt.Path[:pkt.PathLen]) } - fmt.Printf("Packet type: plain\nPayload type: %s\nPath: %s\n", payloadType, path) + fmt.Printf( + "Packet type: plain\nPayload type: %s\nNiceness: %s (%d)\nPath: %s\n", + payloadType, nncp.NicenessFmt(pkt.Nice), pkt.Nice, path, + ) return } var pktEnc nncp.PktEnc _, err = xdr.Unmarshal(bytes.NewReader(beginning), &pktEnc) - if err == nil && pktEnc.Magic == nncp.MagicNNCPEv1 { + if err == nil && pktEnc.Magic == nncp.MagicNNCPEv4 { if *dump { - cfgRaw, err := ioutil.ReadFile(nncp.CfgPathFromEnv(cfgPath)) - if err != nil { - log.Fatalln("Can not read config:", err) - } - ctx, err := nncp.CfgParse(cfgRaw) + ctx, err := nncp.CtxFromCmdline(*cfgPath, "", "", false, false) if err != nil { - log.Fatalln("Can not parse config:", err) + log.Fatalln("Error during initialization:", err) } if ctx.Self == nil { log.Fatalln("Config lacks private keys") @@ -143,8 +157,8 @@ func main() { return } fmt.Printf( - "Packet type: encrypted\nNiceness: %d\nSender: %s\n", - pktEnc.Nice, pktEnc.Sender, + "Packet type: encrypted\nNiceness: %s (%d)\nSender: %s\nRecipient: %s\n", + nncp.NicenessFmt(pktEnc.Nice), pktEnc.Nice, pktEnc.Sender, pktEnc.Recipient, ) return }