Skip to content

Commit

Permalink
Merge branch 'master' of github.com:feross/Fireflock
Browse files Browse the repository at this point in the history
  • Loading branch information
jhiesey committed Nov 6, 2011
2 parents 4a009df + 9d6aa4b commit 04c1301
Show file tree
Hide file tree
Showing 9 changed files with 638 additions and 17 deletions.
12 changes: 0 additions & 12 deletions firesheep/backend/Makefile

This file was deleted.

17 changes: 17 additions & 0 deletions firesheep/backend/Makefile.new
@@ -0,0 +1,17 @@
CXX = g++
SOURCES = src/http_sniffer.cpp src/http_packet.cpp deps/http-parser/http_parser.c
CFLAGS = -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -mmacosx-version-min=10.6 -DHAVE_STDARG_H -Wall
INCLUDES = -include src/config.h -g -DPLATFORM_OSX -framework Security -framework SystemConfiguration -framework CoreFoundation -I/usr/local/include -I/opt/local/include -I deps/ -I deps/http-parser -I deps/json_spirit -I/opt/local/include/QtWebKit -I/opt/local/include/QtGui -I/opt/local/include/QtNetwork -I/opt/local/include/QtCore
LIBS = -lpcap

build: libfire.a sniffer

libfire.a: $(SOURCES) $(SOURCES:.cpp=.hpp) src/backendthread.cpp src/backendthread.hpp Makefile
$(CXX) -c $(CFLAGS) $(INCLUDES) $(LIBS) -o bt.o src/backendthread.cpp
$(CXX) -c $(CFLAGS) $(INCLUDES) $(LIBS) -o hs.o src/http_sniffer.cpp
$(CXX) -c $(CFLAGS) $(INCLUDES) $(LIBS) -o hpack.o src/http_packet.cpp
$(CXX) -c $(CFLAGS) $(INCLUDES) $(LIBS) -o hparse.o deps/http-parser/http_parser.c
ar rcs libfire.a bt.o hs.o hpack.o hparse.o

sniffer: $(SOURCES) $(SOURCES:.cpp=.hpp) src/main.cpp Makefile
$(CXX) $(CFLAGS) $(INCLUDES) $(LIBS) -o sniffer $(SOURCES) src/main.cpp
9 changes: 9 additions & 0 deletions mainwindow.cpp
Expand Up @@ -5,6 +5,12 @@
#include <QWebElementCollection>
#include <QNetworkDiskCache>

class UserAgentWebPage : public QWebPage {
QString userAgentForUrl(const QUrl &url ) const {
return this->QWebPage::userAgentForUrl(url) + QString("trololololo");
}
};

/*
* Default Constructor
*/
Expand All @@ -15,6 +21,9 @@ MainWin::MainWin(QWidget * parent) : QWebView(parent)
m_cache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation) + "/fireflock");
m_cache->setMaximumCacheSize(1000000); //set the cache to 10megs
m_network->setCache(m_cache);

UserAgentWebPage *p = new UserAgentWebPage();
setPage(p);
page()->setNetworkAccessManager(m_network);

// The object we will expose to JavaScript engine:
Expand Down
1 change: 1 addition & 0 deletions resources/fireflock.qrc
Expand Up @@ -8,6 +8,7 @@
<file>js/libs/modernizr-2.0.6.min.js</file>
<file>js/stories/request.js</file>
<file>js/stories/youtube.js</file>
<file>js/identifyUser.js</file>
<file>js/plugins.js</file>
<file>js/script.js</file>
</qresource>
Expand Down
6 changes: 3 additions & 3 deletions resources/index.html
Expand Up @@ -82,19 +82,19 @@ <h1>Anon User 1</h1>

</div>
</div>
<iframe src="http://dcpos.ch/fireshark" width="1200" height="800"></iframe>
</div>
<footer>

</footer>
</div> <!--! end of #container -->


<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script>
<script src="js/libs/jquery-1.6.2.min.js"></script>
<script src="js/mylibs/jquery.tmpl.js"></script>

<script src="js/stories/request.js"></script>
<script src="js/stories/youtube.js"></script>
<script src="js/identifyUser.js"></script>

<script src="js/plugins.js"></script>
<script src="js/users.js"></script>
Expand Down
109 changes: 109 additions & 0 deletions resources/js/facebook.html

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions resources/js/identifyUser.js
@@ -0,0 +1,14 @@
var identifyUserFilter = {

appliesToPacket: function(packet) {
return packet['type'] == "response" && packet['hostname'] == "www.facebook.com";
},

getName: function(packet) {

var html = packet['body'];
var name = $(html).find(".headerTinymanName").text();
console.log("name in getName:" + name);
return name;
}
}
66 changes: 64 additions & 2 deletions resources/js/script.js
Expand Up @@ -3,17 +3,48 @@ stories = [requestStory, youtubeStory];


window.Client = {
//maps each client-server pair to the most recent request from that client to that server
//...responses from server>client are later assumed to correspond
requestMap: {},

handlePacket: function(data) {
if (typeof data == "string") {
data = $.parseJSON(data);
}

//Match requests and responses
var sip = data.serverIP; //.substring(0, data.serverIP.indexOf(":"));
var uip = data.userIP; //.substring(0, data.userIP.indexOf(":"));
var key = "server"+sip+"user"+uip;
if(data.isResponse){
data.request = Client.requestMap[key];
log("Got response, matched with request? "+!!data.request);
} else {
Client.requestMap[key] = data;
}

// Make sure it's not a request from us
if (data.userAgent && data.userAgent.indexOf("trololol") >= 0){
return;
}
if (data.request && data.request.userAgent && data.request.userAgent.indexOf("trololol") >= 0){
return;
}

// Make sure it's not AJAX
// TODO

// Render each story
for(var i in stories) {
var story = stories[i];
if(story.appliesToPacket(data))
this.renderStory(users.getUserIndex(data), story.renderStory(data));
}

//Try to get the identity
if(identifyUserFilter.appliesToPacket(data)){
this.renderUserName(users.getUserIndex(data), identifyUserFilter.getName(data));
}
},

renderStory: function(userIndex, storyData) {
Expand All @@ -31,6 +62,11 @@ window.Client = {

},

renderUserName: function(userIndex, name) {
console.log('setting name to: ' + name);
$("#user" + userIndex).find("h1").text(name);
},

addUser: function(userIndex) {
$("#userTemplate").tmpl({
num: userIndex,
Expand All @@ -54,14 +90,40 @@ $(function() {
sim();
});

function log(msg){
//alert(msg);
console.log(msg);
}


function sim() {
var testPacket = {"type":"request", "path":"/home.php", "userIP":"127.0.0.1", "hostname":"www.nikilster.com"};
/*var testPacket = {"type":"request", "path":"/home.php", "userIP":"127.0.0.1", "hostname":"www.nikilster.com"};
var testPacket2 = {"type":"request", "path":"/watch?v=RF9PFJI_t5I&feature=feedrec_grec_index", "userIP":"100.0.0.1", "hostname":"www.youtube.com"};
var testPacket3 = {"type":"response", "path":"/watch?v=RF9PFJI_t5I&feature=feedrec_grec_index", "userIP":"100.0.0.1", "hostname":"www.facebook.com", "body":"<div><a class='headerTinymanName' href='test'>Nikil Viswanathan</a></div>"};
Client.handlePacket(testPacket);
Client.handlePacket(testPacket);
Client.handlePacket(testPacket);
Client.handlePacket(testPacket);
Client.handlePacket(testPacket);
Client.handlePacket(testPacket2);
}
Client.handlePacket(testPacket3);
*/

$.get('sample.log', function(data){
var pkts = data.split('\n');
log("Loaded "+pkts.length+" packets...");
var i = 0;
setInterval(function(){
var pkt = $.trim(pkts[i]);
i++;
//ignore empty lines
if(pkt.length == 0)
return;
Client.handlePacket(pkt);
}, 1000);
});
}

}

0 comments on commit 04c1301

Please sign in to comment.