diff --git a/Dockerfile b/Dockerfile index 92a58f9..dcffd81 100755 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ ADD ./backend/requirements.txt /execute/requirements.txt RUN pip install --no-cache-dir -r /execute/requirements.txt COPY ./backend/ /execute/ -RUN c++ -O3 -o proxy/proxy proxy/proxy.cpp -pthread -lboost_system -lboost_regex +RUN c++ -O3 -o proxy/proxy proxy/proxy.cpp -pthread -lboost_system COPY ./config/supervisord.conf /etc/supervisor/supervisord.conf COPY ./config/nginx.conf /tmp/nginx.conf COPY ./config/start_nginx.sh /tmp/start_nginx.sh diff --git a/backend/proxy/proxy.cpp b/backend/proxy/proxy.cpp index 0fb706d..9ef909f 100644 --- a/backend/proxy/proxy.cpp +++ b/backend/proxy/proxy.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include #include #include #include @@ -14,7 +14,7 @@ #include // is* -//#define DEBUG +#define DEBUG using namespace std; @@ -39,10 +39,10 @@ unhexlify(InputIterator first, InputIterator last, OutputIterator ascii) { return 0; } -vector> regex_s_c_w, regex_c_s_w, regex_s_c_b, regex_c_s_b; +vector> regex_s_c_w, regex_c_s_w, regex_s_c_b, regex_c_s_b; const char* config_file; -bool filter_data(unsigned char* data, const size_t& bytes_transferred, vector> const &blacklist, vector> const &whitelist){ +bool filter_data(unsigned char* data, const size_t& bytes_transferred, vector> const &blacklist, vector> const &whitelist){ #ifdef DEBUG cout << "---------------- Packet ----------------" << endl; for(int i=0;i ele:blacklist){ - boost::cmatch what; + for (pair ele:blacklist){ + std::cmatch what; try{ - if (boost::regex_match(reinterpret_cast(data), - reinterpret_cast(data) + bytes_transferred, what, ele.second)){ + std::regex_search(reinterpret_cast(data), what, ele.second); + if(what.size() > 0){ cout << "BLOCKED " << ele.first << endl; return false; } } catch(...){ #ifdef DEBUG - cout << "Error while matching regex: " << ele.first << endl; + cerr << "Error while matching regex: " << ele.first << endl; #endif } } - for (pair ele:whitelist){ - boost::cmatch what; + for (pair ele:whitelist){ + std::cmatch what; try{ - if (!boost::regex_match(reinterpret_cast(data), - reinterpret_cast(data) + bytes_transferred, what, ele.second)){ + std::regex_search(reinterpret_cast(data), what, ele.second); + if(what.size() < 0){ cout << "BLOCKED " << ele.first << endl; return false; } } catch(...){ #ifdef DEBUG - cout << "Error while matching regex: " << ele.first << endl; + cerr << "Error while matching regex: " << ele.first << endl; #endif } } @@ -325,23 +325,22 @@ namespace tcp_proxy }; } -void push_regex(char* arg, bool case_sensitive, vector> &v){ +void push_regex(char* arg, bool case_sensitive, vector> &v){ size_t expr_len = (strlen(arg)-2)/2; char expr[expr_len]; unhexlify(arg+2, arg+strlen(arg)-1, expr); + string expr_str(expr, expr_len); try{ if (case_sensitive){ - boost::regex regex(reinterpret_cast(expr), - reinterpret_cast(expr) + expr_len); + std::regex regex(expr_str); #ifdef DEBUG - cout << "Added case sensitive regex " << expr << endl; + cout << "Added case sensitive regex " << expr_str << endl; #endif v.push_back(make_pair(string(arg), regex)); } else { - boost::regex regex(reinterpret_cast(expr), - reinterpret_cast(expr) + expr_len, boost::regex::icase); + std::regex regex(expr_str,std::regex_constants::icase); #ifdef DEBUG - cout << "Added case insensitive regex " << expr << endl; + cout << "Added case insensitive regex " << expr_str << endl; #endif v.push_back(make_pair(string(arg), regex)); }