First version
This commit is contained in:
36
README.md
Normal file
36
README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# bwlcat
|
||||
## Introduction
|
||||
|
||||
A small cat like program with a bandwidth limit.
|
||||
|
||||
This program sends every period T N bytes.
|
||||
|
||||
This is useful for transfering large files over slow links without causing
|
||||
a congestion.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
bwlcat [-h] [-b <bytes>] [-t <time>] [<files>]
|
||||
|
||||
-h: Help
|
||||
-b <bytes>: Sent each time N Bytes
|
||||
-h <time>: Wait T seconds after each packet
|
||||
|
||||
```
|
||||
|
||||
## Example
|
||||
### Simple example
|
||||
|
||||
```bash
|
||||
bwlcat -b 8 -t 2 /etc/hosts
|
||||
```
|
||||
|
||||
Sent's /etc/hosts woth a speed of 4 bytes a second.
|
||||
|
||||
### Usage to transfer a file over ssh
|
||||
```bash
|
||||
ssh remote bwlcat -b 1400 -t 1.5 /bin/bash >/tmp/bash
|
||||
```
|
||||
|
||||
Sent over bash with 1KB/sec.
|
63
bwlcat
Executable file
63
bwlcat
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import getopt
|
||||
import sys
|
||||
import time
|
||||
|
||||
def usage():
|
||||
print("bwlcat [-h] [-b <bytes>] [-t <time>] [<file>]")
|
||||
return(0)
|
||||
|
||||
def bwlcat(fd, config):
|
||||
try:
|
||||
data = fd.read(config["bytes"])
|
||||
while data != '':
|
||||
sys.stdout.write(data)
|
||||
data = fd.read(config["bytes"])
|
||||
time.sleep(config["time"])
|
||||
except Exception as err:
|
||||
print str(err) # will print something like "option -a not recognized"
|
||||
return(1)
|
||||
return(0)
|
||||
|
||||
|
||||
def bwlcatfile(filename, config):
|
||||
try:
|
||||
fd = open(filename)
|
||||
r = bwlcat(fd, config)
|
||||
fd.close()
|
||||
except Exception as err:
|
||||
print str(err) # will print something like "option -a not recognized"
|
||||
return(1)
|
||||
return(r)
|
||||
|
||||
def main():
|
||||
config = {"bytes":1024, "time":1}
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], "hb:t:")
|
||||
except getopt.GetoptError as err:
|
||||
print str(err) # will print something like "option -a not recognized"
|
||||
usage()
|
||||
sys.exit(2)
|
||||
for o, a in opts:
|
||||
if o == "-b":
|
||||
config["bytes"] = int(a)
|
||||
elif o == "-t":
|
||||
config["time"] = float(a)
|
||||
elif o in ("-h"):
|
||||
usage()
|
||||
sys.exit()
|
||||
else:
|
||||
assert False, "unhandled option"
|
||||
if (len(args) == 0):
|
||||
r = bwlcat(sys.stdin, config)
|
||||
else:
|
||||
r = 0
|
||||
for filename in args:
|
||||
r1 = bwlcatfile(filename, config)
|
||||
if (r1 != 0):
|
||||
r = r1
|
||||
return(r)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Reference in New Issue
Block a user