This is a read-only archive. Find the latest Linux articles, documentation, and answers at the new Linux.com!

Linux.com

Feature

CLI Magic: Zip your files across the network with Woof

By Mayank Sharma on February 12, 2007 (8:00:00 AM)

Share    Print    Comments   

Transferring files from one computer to another on a network isn't always a straightforward task. Equipping networks with a file server is one way to simplify the process of exchanging files, but if you need a simpler yet efficient method, try Woof -- short for Web Offer One File. It's a small Python script that facilitates transfer of files across networks and only requires the recipient of the files have a Web browser.

Woof is a temporary Web server that is invoked when you want to transfer files. When a file is on offer, the recipient can download it using a browser or through wget, a popular command-line download utility.

Basic usage

To use Woof, make sure you have Python installed. Download the Woof Python script and save it someplace where it's easily accessible, such as /usr/local/bin/woof. Make the file executable with chmod +x woof. Don't forget to note down your IP address as printed by ifconfig. For the article I'll use 192.168.0.117 as the default IP address.

Woof needs your IP address and a free port on your computer through which its temporary Web server can serve the file. Once it's up and running, Woof will spit out a URL that the recipient can use. For instance:

$ woof -i 192.168.0.117 -p 8888 somefile.txt
Now serving on http://192.168.0.117:8888/

In this example, we specify our IP address and the port with the -i and -p options, followed by the file we need to transfer. Woof acknowledges, printing the complete URL the recipient needs to type into a Web browser to get the file.

Once the file has been downloaded, the temporary Web server quits, and Woof prints an entry in the common log format that looks like:

192.168.0.1 - - [07/Feb/2007 21:31:51] "GET /somefile.txt HTTP/1.1" 200 -

The entry begins with the recipient's IP address -- in this case, 192.168.0.1 -- followed by the time at which Woof finished the file transfer, enclosed in brackets. Next comes the request line from the recipient enclosed in quotes. It reveals the transfer method employed by the recipient (GET), the name of the resource requested (/somefile.txt), and the protocol used (HTTP/1.1). All this information is suffixed with a W3C-compliant status code that reveals whether the request resulted in a successful response (codes beginning in 2), an error caused by the client (codes beginning in 4), or an error in the server (codes beginning in 5).

Transferring multiple files to several recipients

The example above is useful for transferring a single file to a single recipient, but it's also easy to share the file with multiple recipients.

$ woof -i 192.168.0.117 -p 8888 -c 2 somefile.txt
Now serving on http://192.168.0.117:8888/
192.168.0.112 - - [07/Feb/2007 22:53:29] "GET /somefile.txt HTTP/1.0" 200 -
192.168.0.118 - - [07/Feb/2007 22:55:34] "GET /somefile.txt HTTP/1.0" 200 -
$

With the -c option you can specify the number of times a file can be downloaded. By default Woof sets this count to 1. In the example above, we set the count to 2 and Woof exits when the file has been downloaded twice, printing two log entries.

In the foregoing examples we transferred only a single file. Transferring multiple files isn't all that different:

$ woof -i 192.168.0.117 -p 8888 my_files/
Now serving on http://192.168.0.117:8888/

This will transfer the directory my_files/. To ease transportation, Woof will create a tar archive of the directory and compress it with gzip. In the example above, the recipient will download a file called my_files.tar.gz, which he can uncompress and untar with the command tar zxvf my_files.tar.gz.

The time it takes to compress a directory depends upon its size. If you are on a fast network and don't want to wait for the directory to be compressed, use the -u option, which will forgo the compression process:

$ woof -i 192.168.0.117 -p 8888 -u some_more_of_my_files/
Now serving on http://192.168.0.117:8888/

This creates a .tar archive that you can untar using the tar xvf some_more_of_my_files.tar command.

As with single files, you can use the -c option to specify how many times you need the compressed directory to be available for download.

However, Woof can transfer only single files or a single directory. It's not designed to transfer multiple files from multiple locations at one go. For that you'd need to spawn multiple Woof instances, or group all files under one directory.

Also remember that Woof can only offer one file over one port. If you use multiple instances of Woof simultaneously to offer multiple files, you'll need to use different ports.

Customizing default options

To simplify the options specified by the woof command, you can specify some default values in a resource script file. Suppose you have a fixed IP address from which you need to always transfer two copies of every file or directory, and the directories should never be compressed. Create a .woofrc file under your home directory and enter the following values in it:

[main]
ip = 192.168.0.117
port = 8888
count = 2
compressed = false

Now you can simply say woof somefile.txt without the IP and port information to share two copies of the text file, or woof some_directory/ to offer two uncompressed copies of the specified directory.

As you can see, using Woof is pretty simple and straightforward -- but wait, there's more! What do you do when a recipient wants to share some files? No need to ask him to grab a copy of Woof from its download site. Instead, use the -s option instead of specifying any file or directory:

$ woof -i 192.168.0.117 -p 8888 -s
Now serving on http://192.168.0.117:8888/

When the recipient types in the download URL, he will be served a copy of Woof itself. How cool is that?

I've been using Woof for zipping files over my network ever since I found it. It handles files of all forms and sizes. I've successfully transferred directories containing several gigabytes of files and even DVD ISO images simultaneously, over wired and wireless networks, to a computer running Windows. With its bare minimum requirements, and negligible size, it's a handy utility.

- Write for us - and get paid! -

Share    Print    Comments   

Comments

on CLI Magic: Zip your files across the network with Woof

Note: Comments are owned by the poster. We are not responsible for their content.

It is nice tool

Posted by: Anonymous Coward on February 12, 2007 05:59 PM
Very, very nice tool. Thanks for opening my eyes on it. It is very useful, for fast transfer something casual, from your laptop, where there are firewall and it is not necessary to start a File server only to server a single file.

#

woof IS a file server

Posted by: Anonymous Coward on February 12, 2007 09:33 PM
It serves a file, or a directory of files.

However, unlike servers such as Apache, woof exits after serving the file(s). And woof requires no configuration beyond the command-line invocation.

Woof, and other servers such as Apache, listen for incoming connections on an arbitrary port. Apache, and other http servers, traditionally listen on port 80; but the server operator may choose to use other ports. As with any server the woof operator must choose an open port.

#

Re:It is nice tool

Posted by: Anonymous Coward on February 12, 2007 11:12 PM
Damn.. it wont work in my machine... dont know why?
pretty useless if it doesnt work!

#

another analog tool

Posted by: Anonymous Coward on February 13, 2007 05:29 PM
There's another tool that does the same thing: webfs [<a href="http://linux.bytesex.org/misc/webfs.html%5D" title="bytesex.org">http://linux.bytesex.org/misc/webfs.html%5D</a bytesex.org>.

Is flexible and stable. If you call it wherever you are it'll start a webserver and support CGI support (GET requests only) and optional SSL support.

#

Re:another analog tool

Posted by: Anonymous Coward on February 14, 2007 12:20 AM
<a href="http://nearshare.net/" title="nearshare.net">http://nearshare.net/</a nearshare.net> is another one. Nothing to run on the client at all but a browser - it loads an applet that is a web server for local clients.

#

Saved my life :)

Posted by: Anonymous [ip: 87.205.69.44] on October 24, 2007 03:31 PM
Thank you :)

#

This story has been archived. Comments can no longer be posted.



 
Tableless layout Validate XHTML 1.0 Strict Validate CSS Powered by Xaraya