Work in progress.
WGOtW is a program traffic inspection tool.
Unlike system-wide traffic inspection tools like Wireshark, WGOtW only seeks to capture the traffic for a single program.
It also doesn't attempt to capture underlying IP or Ethernet packets - only the buffers sent and received through the send(2) and recv(2) family of functions.
Building
Usage
You can use the included wrapper script:
Or just LD_PRELOAD the library directly:
$ LD_PRELOAD=./libwgotw.so <cmd [args ...]>
Example
$ ./wgotw -Dd 'curl example.com'
[ ... snip ... ]
$ ls -R wgotw-934/
wgotw-934/:
127.0.1.1  93.184.216.34
wgotw-934/127.0.1.1:
53
wgotw-934/127.0.1.1/53:
inbound.0  inbound.1
wgotw-934/93.184.216.34:
80
wgotw-934/93.184.216.34/80:
inbound.1  outbound.0
$ cat wgotw-934/93.184.216.34/80/outbound.0
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 Gecko
Accept: */*
$ cat wgotw-934/93.184.216.34/80/inbound.1
HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: text/html
Date: Fri, 05 May 2017 01:12:41 GMT
Etag: "359670651+ident"
Expires: Fri, 12 May 2017 01:12:41 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (ewr/15BD)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1270
<!doctype html>
<html>
<head>
[ ... snip ... ]
TODO:
- Dump contents of 
iovec in sendmsg/recvmsg. 
- Add a reorganization tool to turn 
inbound.N/outbound.N into a single file (BSON?). 
- Add a visualization tool showing the flow/size of messages.
 
- Improve/fix 
fork and multi-process behavior