fix README

This commit is contained in:
emdee 2022-10-03 06:44:02 +00:00
parent 6752347ea6
commit a466687471
2 changed files with 33 additions and 24 deletions

View File

@ -3,10 +3,16 @@
Read and manipulate tox profile files. It started as a simple script from Read and manipulate tox profile files. It started as a simple script from
<https://stackoverflow.com/questions/30901873/what-format-are-tox-files-stored-in> <https://stackoverflow.com/questions/30901873/what-format-are-tox-files-stored-in>
For the moment tox_savefile.py just reads a Tox profile and ```tox_savefile.py``` reads a Tox profile and prints to stderr various
prints to stdout various things that it finds. Then it writes what it things that it finds. Then can write what it found in JSON/YAML/REPR/PPRINT
found in YAML to stderr. Later it can be extended to print out JSON to a file. It can also test the nodes in a profile using ```nmap```.
or YAML, and then extended to accept JSON or YAML to write a profile.
It can also download, select, or test nodes in a ```DHTnode.json``` file.
It can also decrypt a profile, saving the output to a file.
It can also edit a profile, changing a few select fields.
Later it can be extended to edit more crucial fields.
## Usage ## Usage
@ -14,21 +20,24 @@ Reads a tox profile and prints out information on what's in there to stderr.
Call it with one argument, the filename of the profile for the decrypt, edit Call it with one argument, the filename of the profile for the decrypt, edit
or info commands, or the filename of the nodes file for the nodes command. or info commands, or the filename of the nodes file for the nodes command.
3 commands are supported: 4 commands are supported:
1. ```--command decrypt``` decrypts the profile and writes to the result 1. ```--command decrypt``` decrypts the profile and writes to the result
to stdout to stdout
2. ```--command info``` prints info about what's in the Tox profile to stderr 2. ```--command info``` prints info about what's in the Tox profile to stderr
3. ```--command nodes``` assumes you are reading a json nodes file instead of 3. ```--command nodes``` assumes you are reading a json nodes file instead of
a profile a profile
4. ```--command edit``` edits the profile and writes to the result
to a file.
``` ```
usage: tox_savefile.py [-h] [--output OUTPUT] usage: tox_savefile.py [-h] [--output OUTPUT]
[--command {info,decrypt,nodes}] [--command info|decrypt|nodes|edit]
[--indent INDENT] [--indent INDENT]
[--info {info,repr,yaml,json,pprint,nmap_udp,nmap_tcp}] [--info info|repr|yaml|json|pprint|nmap_udp|nmap_tcp]
[--nodes {select_tcp,select_udp,select_version,nmap_tcp,nmap_udp}] [--nodes select_tcp|select_udp|select_version|nmap_tcp|nmap_udp]
[--edit help|section,num,key,val]
[--download_nodes_url DOWNLOAD_NODES_URL] [--download_nodes_url DOWNLOAD_NODES_URL]
[profile] profile
``` ```
Positional arguments: Positional arguments:
``` ```
@ -37,13 +46,14 @@ Positional arguments:
Optional arguments: Optional arguments:
``` ```
-h, --help show this help message and exit -h, --help show this help message and exit
--command {info,decrypt,nodes} --command {info,decrypt,nodes,edit}
Action command - default: info Action command - default: info
--output OUTPUT Destination for info/decrypt/nodes - defaults to stdout --output OUTPUT Destination for info/decrypt/nodes - defaults to stdout
--info {info,repr,yaml,json,pprint,nmap_udp,nmap_tcp} --info info|repr|yaml|json|pprint|nmap_udp|nmap_tcp
Format for info command Format for info command
--nodes {select_tcp,select_udp,select_version,nmap_tcp,nmap_udp} --nodes select_tcp|select_udp|select_version|nmap_tcp|nmap_udp
Action for nodes command (requires jq) Action for nodes command (requires jq)
--edit help|section,num,key,val
--indent INDENT Indent for yaml/json/pprint --indent INDENT Indent for yaml/json/pprint
--download_nodes_url DOWNLOAD_NODES_URL --download_nodes_url DOWNLOAD_NODES_URL
``` ```
@ -83,17 +93,17 @@ Reguires ```nmap``` and uses ```sudo```.
### --command decrypt ### --command decrypt
Decrypt a profile. Decrypt a profile, with ```--output``` to a filename.
### --command edit ### --command edit
The code now can generate an edited copy of the profile. The code now can generate an edited copy of the profile.
Use the command ```--command edit --edit section,key,val``` with Use the command ```--command edit --edit section,num,key,val``` with
```--output``` and a filename, to process the file with info to stderr, ```--output``` and a filename, to process the file with info to stderr,
and it will save an copy of the edited file to the and it will save an copy of the edited file to the
```--output``` file (unencrypted). There's not much editing yet; give ```--output``` file (unencrypted). There's not much editing yet; give
```--command edit --edit help``` to get a list of what Available Sections, ```--command edit --edit help``` to get a list of what Available Sections,
and Supported Quads (section,num,key,type) that can be edited. and Supported Quads ```(section,num,key,type)``` that can be edited.
Currently it is: Currently it is:
``` ```
NAME,.,Nick_name,str NAME,.,Nick_name,str

View File

@ -749,9 +749,8 @@ if __name__ == '__main__':
with open(oArgs.output, 'wt') as oFd: with open(oArgs.output, 'wt') as oFd:
oFd.write(json_head) oFd.write(json_head)
cmd = f"cat '{sFile}' | jq '.|with_entries(select(.key|match(\"nodes\"))).nodes[]|select(.status_tcp)|select(.ipv4|match(\".\"))' " cmd = f"cat '{sFile}' | jq '.|with_entries(select(.key|match(\"nodes\"))).nodes[]|select(.status_tcp)|select(.ipv4|match(\".\"))' "
iRet = os.system(cmd +f" >> {oArgs.output}") iRet = os.system(cmd +"| sed -e '2,$s/^{/,{/'" +f" >>{oArgs.output}")
with open(oArgs.output, 'at') as oFd: with open(oArgs.output, 'at') as oFd: oFd.write(']}\n')
oFd.write(']}')
elif oArgs.nodes == 'select_udp': elif oArgs.nodes == 'select_udp':
assert oArgs.output, "--output required for this command" assert oArgs.output, "--output required for this command"
@ -759,19 +758,19 @@ if __name__ == '__main__':
with open(oArgs.output, 'wt') as oFd: with open(oArgs.output, 'wt') as oFd:
oFd.write(json_head) oFd.write(json_head)
cmd = f"cat '{sFile}' | jq '.|with_entries(select(.key|match(\"nodes\"))).nodes[]|select(.status_udp)|select(.ipv4|match(\".\"))' " cmd = f"cat '{sFile}' | jq '.|with_entries(select(.key|match(\"nodes\"))).nodes[]|select(.status_udp)|select(.ipv4|match(\".\"))' "
iRet = os.system(cmd +f" >> {oArgs.output}") iRet = os.system(cmd +"| sed -e '2,$s/^{/,{/'" +f" >>{oArgs.output}")
with open(oArgs.output, 'at') as oFd: with open(oArgs.output, 'at') as oFd: oFd.write(']}\n')
oFd.write(']}')
elif oArgs.nodes == 'select_version': elif oArgs.nodes == 'select_version':
assert bHAVE_JQ, "jq is required for this command" assert bHAVE_JQ, "jq is required for this command"
assert oArgs.output, "--output required for this command" assert oArgs.output, "--output required for this command"
with open(oArgs.output, 'wt') as oFd: with open(oArgs.output, 'wt') as oFd:
oFd.write(json_head) oFd.write(json_head)
cmd = f"cat '{sFile}' | jq '.|with_entries(select(.key|match(\"nodes\"))).nodes[]|select(.status_udp)|select(.version|match(\"{sTOX_VERSION}\"))' " cmd = f"cat '{sFile}' | jq '.|with_entries(select(.key|match(\"nodes\"))).nodes[]|select(.status_udp)|select(.version|match(\"{sTOX_VERSION}\"))'"
iRet = os.system(cmd +f" >> {oArgs.output}")
iRet = os.system(cmd +"| sed -e '2,$s/^{/,{/'" +f" >>{oArgs.output}")
with open(oArgs.output, 'at') as oFd: with open(oArgs.output, 'at') as oFd:
oFd.write(']}') oFd.write(']}\n')
elif oArgs.nodes == 'nmap_tcp': elif oArgs.nodes == 'nmap_tcp':
assert oArgs.output, "--output required for this command" assert oArgs.output, "--output required for this command"