SniffURI by Erik van der Poel originally created in 1998 http://sniffuri.org/ Introduction This is a set of tools to work with the protocols underlying the Web. Description of Tools view.cgi This is an HTML form that allows the user to enter a URL. The CGI then fetches the object associated with that URL, and presents it to the user in a colorful way. For example, HTTP headers are shown, HTML documents are parsed and colored, and non-ASCII characters are shown in hex. Links are turned into live links, that can be clicked to see the source of that URL, allowing the user to "browse" source. robot Originally written to see how many documents actually include the HTTP and HTML charsets, this tool has developed into a more general robot that collects various statistics, including HTML tag statistics, DNS lookup timing, etc. This robot does not adhere to the standard robot rules, so please exercise caution if you use this. proxy This is an HTTP proxy that sits between the user's browser and another HTTP proxy. It captures all of the HTTP traffic between the browser and the Internet, and presents it to the user in the same colorful way as the above-mentioned view.cgi. grab Allows the user to "grab" a whole Web site, or everything under a particular directory. This is useful if you want to grab a bunch of related HTML files, e.g. the whole CSS2 spec. link Allows the user to recursively check for bad links in a Web site or under a particular directory. Description of Files addurl.c, addurl.h: adds URLs to a list all.h: header that includes all the required headers buf.c, buf.h: I/O routines cgiview.c: the view.cgi tool config*: autoconf-related files dns.c: experimental DNS toy doRun: used with robot file.c, file.h: the file: URL ftp.c: experimental FTP toy grab.c: the "grab" tool hash.c, hash.h: incomplete hash table routines HISTORY: brief history of this project html.c, html.h: HTML parser http.c, http.h: simple HTTP implementation index.html: used with view.cgi tool INSTALL: see this file for build instructions link.c: the "link" tool main.h: very simple callbacks, could be more object-oriented Makefile, Makefile.in: to build everything mime.c, mime.h: MIME Content-Type parser net.c, net.h: low-level Internet APIs pop.c: experimental POP toy proxy.c: the "proxy" tool robot.c: the "robot" tool run: used with robot test: directory used in testing thread.c, thread.h: for threading in the robot and locks elsewhere TODO: notes to myself url.c, url.h, urltest.c: implementation of absolute and relative URLs utils.c, utils.h: some little utility routines view.c, view.h: presents stuff to the user Description of Code The code is extremely quick-and-dirty. It could be a lot more elegant, e.g. C++, object-oriented, extensible, etc. The point of this exercise was not to design and write a program well, but to create some useful tools and to learn about Internet protocols.