Hard refactor
This commit is contained in:
parent
196b865b08
commit
95157fd521
11 changed files with 305 additions and 166 deletions
|
@ -1,74 +1,27 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
project(ProjectRiddle)
|
||||
|
||||
# Project settings
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
|
||||
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||
|
||||
set(SYSCONF_INSTALL_DIR
|
||||
"/etc"
|
||||
CACHE PATH "Path where to install configuration")
|
||||
|
||||
add_subdirectory(commons) # Commons libraries
|
||||
add_subdirectory(config) # Configuration files
|
||||
|
||||
# Projects includes
|
||||
include_directories(${CMAKE_SOURCE_DIR})
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/commons/)
|
||||
|
||||
set(RIDDLE_SRCS riddle/main.cpp)
|
||||
set(CIGARETTE_SRCS cigarette/tools.cpp cigarette/tools.h cigarette/main.cpp)
|
||||
set(RANGING_SRCS ranging/tools.h ranging/tools.cpp ranging/main.cpp)
|
||||
set(PURSUER_SRCS pursuer/tools.h pursuer/tools.cpp pursuer/main.cpp)
|
||||
set(BREEDER_SRCS breeder/tools.h breeder/tools.cpp breeder/main.cpp)
|
||||
|
||||
add_executable(ranging ${RANGING_SRCS})
|
||||
add_executable(cigarette ${CIGARETTE_SRCS})
|
||||
add_executable(riddle ${RIDDLE_SRCS})
|
||||
add_executable(pursuer ${PURSUER_SRCS})
|
||||
add_executable(breeder ${BREEDER_SRCS})
|
||||
|
||||
set(BOOST_LIBS program_options system regex thread)
|
||||
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
|
||||
|
||||
find_library(LIBPCAP pcap)
|
||||
|
||||
find_package (Threads)
|
||||
|
||||
SET(CURSES_NEED_NCURSES TRUE)
|
||||
find_package(Curses)
|
||||
|
||||
# Build riddle
|
||||
target_link_libraries(riddle ${Boost_LIBRARIES})
|
||||
target_link_libraries(riddle ${LIBPCAP})
|
||||
target_link_libraries(riddle dump)
|
||||
|
||||
# Build cigarette
|
||||
target_link_libraries(cigarette ${Boost_LIBRARIES})
|
||||
target_link_libraries(cigarette ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(cigarette network)
|
||||
target_link_libraries(cigarette dump)
|
||||
|
||||
# Build ranging
|
||||
target_link_libraries(ranging ${Boost_LIBRARIES})
|
||||
target_link_libraries(ranging ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(ranging ${CURSES_LIBRARY})
|
||||
target_link_libraries(ranging network)
|
||||
|
||||
# Build pursuer
|
||||
target_link_libraries(pursuer ${Boost_LIBRARIES})
|
||||
target_link_libraries(pursuer ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(pursuer network)
|
||||
target_link_libraries(pursuer dump)
|
||||
|
||||
# Build breeder
|
||||
target_link_libraries(breeder ${Boost_LIBRARIES})
|
||||
target_link_libraries(breeder ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(breeder network)
|
||||
target_link_libraries(breeder dump)
|
||||
|
||||
# Install binaries
|
||||
install(TARGETS riddle DESTINATION sbin)
|
||||
install(TARGETS breeder cigarette pursuer ranging DESTINATION bin)
|
||||
# Project modules (Comment for disable, pay attention to dependencies)
|
||||
add_subdirectory(commons) # Commons libraries
|
||||
add_subdirectory(config) # Configuration files
|
||||
add_subdirectory(riddle) # Riddles files
|
||||
add_subdirectory(breeder) # Breeder files
|
||||
add_subdirectory(pursuer) # Pursuer files
|
||||
add_subdirectory(cigarette) # Cigarette files
|
||||
add_subdirectory(ranging) # Ranging files
|
||||
|
||||
# Generate packages
|
||||
INCLUDE(InstallRequiredSystemLibraries)
|
||||
|
@ -83,4 +36,4 @@ set(CPACK_PACKAGE_VERSION_PATCH "0")
|
|||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
|
||||
set(CPACK_PACKAGE_CONTACT "Andrea Bontempi <andreabont@yahoo.it>")
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Andrea Bontempi")
|
||||
INCLUDE(CPack)
|
||||
INCLUDE(CPack)
|
25
breeder/CMakeLists.txt
Normal file
25
breeder/CMakeLists.txt
Normal file
|
@ -0,0 +1,25 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
project (breeder)
|
||||
|
||||
set(BREEDER_SRCS
|
||||
${PROJECT_SOURCE_DIR}/tools.h
|
||||
${PROJECT_SOURCE_DIR}/tools.cpp
|
||||
${PROJECT_SOURCE_DIR}/main.cpp
|
||||
)
|
||||
|
||||
add_executable(breeder ${BREEDER_SRCS})
|
||||
|
||||
# Include libraries
|
||||
set(BOOST_LIBS program_options system regex thread)
|
||||
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
|
||||
find_package(Threads)
|
||||
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
|
||||
|
||||
# Build breeder
|
||||
target_link_libraries(breeder ${Boost_LIBRARIES})
|
||||
target_link_libraries(breeder ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(breeder network)
|
||||
target_link_libraries(breeder dump)
|
||||
|
||||
# Install breeder
|
||||
install(TARGETS breeder DESTINATION bin)
|
25
cigarette/CMakeLists.txt
Normal file
25
cigarette/CMakeLists.txt
Normal file
|
@ -0,0 +1,25 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
project (cigarette)
|
||||
|
||||
set(CIGARETTE_SRCS
|
||||
${PROJECT_SOURCE_DIR}/tools.h
|
||||
${PROJECT_SOURCE_DIR}/tools.cpp
|
||||
${PROJECT_SOURCE_DIR}/main.cpp
|
||||
)
|
||||
|
||||
add_executable(cigarette ${CIGARETTE_SRCS})
|
||||
|
||||
# Include libraries
|
||||
set(BOOST_LIBS program_options system regex thread)
|
||||
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
|
||||
find_package(Threads)
|
||||
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
|
||||
|
||||
# Build cigarette
|
||||
target_link_libraries(cigarette ${Boost_LIBRARIES})
|
||||
target_link_libraries(cigarette ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(cigarette network)
|
||||
target_link_libraries(cigarette dump)
|
||||
|
||||
# Install cigarette
|
||||
install(TARGETS cigarette DESTINATION bin)
|
26
pursuer/CMakeLists.txt
Normal file
26
pursuer/CMakeLists.txt
Normal file
|
@ -0,0 +1,26 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
project (pursuer)
|
||||
|
||||
set(PURSUER_SRCS
|
||||
${PROJECT_SOURCE_DIR}/tools.h
|
||||
${PROJECT_SOURCE_DIR}/tools.cpp
|
||||
${PROJECT_SOURCE_DIR}/main.cpp
|
||||
)
|
||||
|
||||
add_executable(pursuer ${PURSUER_SRCS})
|
||||
|
||||
# Include libraries
|
||||
set(BOOST_LIBS program_options system regex thread)
|
||||
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
|
||||
find_package(Threads)
|
||||
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
|
||||
|
||||
# Build pursuer
|
||||
target_link_libraries(pursuer ${Boost_LIBRARIES})
|
||||
target_link_libraries(pursuer ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(pursuer network)
|
||||
target_link_libraries(pursuer dump)
|
||||
|
||||
|
||||
# Install pursuer
|
||||
install(TARGETS pursuer DESTINATION bin)
|
31
ranging/CMakeLists.txt
Normal file
31
ranging/CMakeLists.txt
Normal file
|
@ -0,0 +1,31 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
project (ranging)
|
||||
|
||||
set(RANGING_SRCS
|
||||
${PROJECT_SOURCE_DIR}/thread.h
|
||||
${PROJECT_SOURCE_DIR}/thread.cpp
|
||||
${PROJECT_SOURCE_DIR}/thread_printer.cpp
|
||||
${PROJECT_SOURCE_DIR}/thread_scribe.cpp
|
||||
${PROJECT_SOURCE_DIR}/tools.h
|
||||
${PROJECT_SOURCE_DIR}/tools.cpp
|
||||
${PROJECT_SOURCE_DIR}/main.cpp
|
||||
)
|
||||
|
||||
add_executable(ranging ${RANGING_SRCS})
|
||||
|
||||
# Include libraries
|
||||
set(CURSES_NEED_NCURSES TRUE)
|
||||
find_package(Curses)
|
||||
set(BOOST_LIBS program_options system regex thread)
|
||||
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
|
||||
find_package(Threads)
|
||||
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
|
||||
|
||||
# Build ranging
|
||||
target_link_libraries(ranging ${Boost_LIBRARIES})
|
||||
target_link_libraries(ranging ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries(ranging ${CURSES_LIBRARY})
|
||||
target_link_libraries(ranging network)
|
||||
|
||||
# Install ranging
|
||||
install(TARGETS ranging DESTINATION bin)
|
111
ranging/main.cpp
111
ranging/main.cpp
|
@ -46,6 +46,7 @@
|
|||
#include "commons/macaddress.h"
|
||||
#include "commons/packet.h"
|
||||
#include "tools.h"
|
||||
#include "thread.h"
|
||||
|
||||
#define TIMETOLIVE 120
|
||||
|
||||
|
@ -63,15 +64,6 @@ void exit_signal ( int id ) {
|
|||
}
|
||||
#endif
|
||||
|
||||
boost::mutex mymutex;
|
||||
int maxttl = TIMETOLIVE;
|
||||
|
||||
/** The thread "printer" manages the display. */
|
||||
void printer(list<device> *found, win_size winxy);
|
||||
|
||||
/** The thread "scribe" listens to incoming packets. */
|
||||
void scribe(list<device> *found);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
#ifdef __linux__
|
||||
|
@ -104,6 +96,8 @@ int main(int argc, char **argv) {
|
|||
cout << desc << "\n";
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
int maxttl = TIMETOLIVE;
|
||||
|
||||
if (vm.count("ttl")) {
|
||||
maxttl = vm["ttl"].as<int>();
|
||||
|
@ -132,7 +126,7 @@ int main(int argc, char **argv) {
|
|||
list<device> found;
|
||||
|
||||
boost::thread scribe_t(scribe, &found);
|
||||
boost::thread printer_t(printer, &found, winxy);
|
||||
boost::thread printer_t(printer, &found, winxy, maxttl);
|
||||
|
||||
scribe_t.join();
|
||||
printer_t.join();
|
||||
|
@ -140,100 +134,3 @@ int main(int argc, char **argv) {
|
|||
endwin();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void printer(list<device> *found, win_size winxy) {
|
||||
|
||||
static boost::posix_time::seconds delay(1);
|
||||
|
||||
while (1) {
|
||||
|
||||
boost::mutex::scoped_lock mylock(mymutex);
|
||||
|
||||
clear();
|
||||
setHead(winxy);
|
||||
|
||||
int countLine = 1;
|
||||
|
||||
list<device>::iterator r = found->begin();
|
||||
|
||||
while (r != found->end()) {
|
||||
|
||||
if (time(NULL) > r->getEpoch() + maxttl) {
|
||||
|
||||
list<device>::iterator ex = r;
|
||||
r++;
|
||||
found->erase(ex);
|
||||
|
||||
} else {
|
||||
|
||||
printLine(winxy, countLine, maxttl, r);
|
||||
r++;
|
||||
|
||||
}
|
||||
|
||||
countLine++;
|
||||
|
||||
}
|
||||
|
||||
mylock.unlock();
|
||||
|
||||
boost::this_thread::sleep(delay);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void scribe(list<device> *found) {
|
||||
|
||||
string r_packet;
|
||||
getline(cin, r_packet);
|
||||
if (cin.eof()) return;
|
||||
|
||||
while (1) {
|
||||
try {
|
||||
|
||||
shared_ptr<packet> pkg = packet::factory ( r_packet );
|
||||
|
||||
if (pkg->isArp()) {
|
||||
|
||||
boost::mutex::scoped_lock mylock(mymutex);
|
||||
|
||||
shared_ptr<ARPpacket> pkg_arp = dynamic_pointer_cast< ARPpacket > ( pkg );
|
||||
|
||||
bool isFound = false;
|
||||
|
||||
list<device>::iterator p = found->begin();
|
||||
|
||||
while (p != found->end()) {
|
||||
|
||||
if (p->getMacAddress() == pkg_arp->getSenderMac() && p->getIpAddress() == pkg_arp->getSenderIp()) {
|
||||
p->setEpoch(pkg_arp->getEpoch());
|
||||
isFound = true;
|
||||
break;
|
||||
}
|
||||
|
||||
p++;
|
||||
}
|
||||
|
||||
if (!isFound) {
|
||||
device newDevice(pkg_arp->getSenderMac(), pkg_arp->getSenderIp());
|
||||
found->push_back(newDevice);
|
||||
}
|
||||
|
||||
mylock.unlock();
|
||||
|
||||
}
|
||||
|
||||
getline(cin, r_packet);
|
||||
if (cin.eof()) return;
|
||||
|
||||
} catch (packet::Overflow) {
|
||||
cerr << "Overflow! :-P" << endl;
|
||||
endwin();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
10
ranging/thread.cpp
Normal file
10
ranging/thread.cpp
Normal file
|
@ -0,0 +1,10 @@
|
|||
/*
|
||||
* File: thread.h
|
||||
* Author: andreabont
|
||||
*
|
||||
* Created on 25 gennaio 2014, 10.44
|
||||
*/
|
||||
|
||||
#include "thread.h"
|
||||
|
||||
boost::mutex mymutex;
|
24
ranging/thread.h
Normal file
24
ranging/thread.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* File: thread.h
|
||||
* Author: andreabont
|
||||
*
|
||||
* Created on 25 gennaio 2014, 10.44
|
||||
*/
|
||||
|
||||
#ifndef THREAD_H
|
||||
#define THREAD_H
|
||||
|
||||
#include <list>
|
||||
#include <boost/thread/thread.hpp>
|
||||
#include "tools.h"
|
||||
|
||||
extern boost::mutex mymutex;
|
||||
|
||||
/** The thread "printer" manages the display. */
|
||||
void printer(std::list<device> *found, win_size winxy, int maxttl);
|
||||
|
||||
/** The thread "scribe" listens to incoming packets. */
|
||||
void scribe(std::list<device> *found);
|
||||
|
||||
#endif /* THREAD_H */
|
||||
|
54
ranging/thread_printer.cpp
Normal file
54
ranging/thread_printer.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* File: thread_printer.cpp
|
||||
* Author: andreabont
|
||||
*
|
||||
* Created on 25 gennaio 2014, 10.47
|
||||
*/
|
||||
|
||||
#include <list>
|
||||
#include <curses.h>
|
||||
#include "thread.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
void printer(list<device> *found, win_size winxy, int maxttl) {
|
||||
|
||||
static boost::posix_time::seconds delay(1);
|
||||
|
||||
while (1) {
|
||||
|
||||
boost::mutex::scoped_lock printer_lock(mymutex);
|
||||
|
||||
clear();
|
||||
setHead(winxy);
|
||||
|
||||
int countLine = 1;
|
||||
|
||||
list<device>::iterator r = found->begin();
|
||||
|
||||
while (r != found->end()) {
|
||||
|
||||
if (time(NULL) > r->getEpoch() + maxttl) {
|
||||
|
||||
list<device>::iterator ex = r;
|
||||
r++;
|
||||
found->erase(ex);
|
||||
|
||||
} else {
|
||||
|
||||
printLine(winxy, countLine, maxttl, r);
|
||||
r++;
|
||||
|
||||
}
|
||||
|
||||
countLine++;
|
||||
|
||||
}
|
||||
|
||||
printer_lock.unlock();
|
||||
|
||||
boost::this_thread::sleep(delay);
|
||||
|
||||
}
|
||||
|
||||
}
|
72
ranging/thread_scribe.cpp
Normal file
72
ranging/thread_scribe.cpp
Normal file
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* File: thread_scribe.cpp
|
||||
* Author: andreabont
|
||||
*
|
||||
* Created on 25 gennaio 2014, 10.45
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <curses.h>
|
||||
#include "thread.h"
|
||||
#include "commons/packet.h"
|
||||
#include "commons/macaddress.h"
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace network;
|
||||
|
||||
void scribe(list<device> *found) {
|
||||
|
||||
string r_packet;
|
||||
getline(cin, r_packet);
|
||||
if (cin.eof()) return;
|
||||
|
||||
while (1) {
|
||||
try {
|
||||
|
||||
shared_ptr<packet> pkg = packet::factory ( r_packet );
|
||||
|
||||
if (pkg->isArp()) {
|
||||
|
||||
boost::mutex::scoped_lock scribe_lock(mymutex);
|
||||
|
||||
shared_ptr<ARPpacket> pkg_arp = dynamic_pointer_cast< ARPpacket > ( pkg );
|
||||
|
||||
bool isFound = false;
|
||||
|
||||
list<device>::iterator p = found->begin();
|
||||
|
||||
while (p != found->end()) {
|
||||
|
||||
if (p->getMacAddress() == pkg_arp->getSenderMac() && p->getIpAddress() == pkg_arp->getSenderIp()) {
|
||||
p->setEpoch(pkg_arp->getEpoch());
|
||||
isFound = true;
|
||||
break;
|
||||
}
|
||||
|
||||
p++;
|
||||
}
|
||||
|
||||
if (!isFound) {
|
||||
device newDevice(pkg_arp->getSenderMac(), pkg_arp->getSenderIp());
|
||||
found->push_back(newDevice);
|
||||
}
|
||||
|
||||
scribe_lock.unlock();
|
||||
|
||||
}
|
||||
|
||||
getline(cin, r_packet);
|
||||
if (cin.eof()) return;
|
||||
|
||||
} catch (packet::Overflow) {
|
||||
cerr << "Overflow! :-P" << endl;
|
||||
endwin();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
22
riddle/CMakeLists.txt
Normal file
22
riddle/CMakeLists.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
project (riddle)
|
||||
|
||||
set(RIDDLE_SRCS
|
||||
${PROJECT_SOURCE_DIR}/main.cpp
|
||||
)
|
||||
|
||||
add_executable(riddle ${RIDDLE_SRCS})
|
||||
|
||||
# Include libraries
|
||||
find_library(LIBPCAP pcap)
|
||||
set(BOOST_LIBS program_options system regex thread)
|
||||
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
|
||||
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
|
||||
|
||||
# Build riddle
|
||||
target_link_libraries(riddle ${Boost_LIBRARIES})
|
||||
target_link_libraries(riddle ${LIBPCAP})
|
||||
target_link_libraries(riddle dump)
|
||||
|
||||
# Install riddle
|
||||
install(TARGETS riddle DESTINATION sbin)
|
Loading…
Reference in a new issue