data handler improves, written test for nfproxy, new option on parsing fail
This commit is contained in:
@@ -191,6 +191,12 @@ class PktRequest {
|
||||
size_t total_size;
|
||||
if (is_ipv6){
|
||||
delete ipv6;
|
||||
ipv6 = nullptr;
|
||||
if (data_size >= 40){ // 40 == fixed size of ipv6 header
|
||||
// Resetting payload length before parsing to libtins
|
||||
uint16_t payload_len = htons(data_size-40);
|
||||
memcpy(((uint8_t *)data)+4, &payload_len, 2);
|
||||
}
|
||||
ipv6 = new Tins::IPv6((uint8_t*)data, data_size);
|
||||
if (tcp){
|
||||
tcp = ipv6->find_pdu<Tins::TCP>();
|
||||
@@ -204,6 +210,7 @@ class PktRequest {
|
||||
total_size = ipv6->size();
|
||||
}else{
|
||||
delete ipv4;
|
||||
ipv4 = nullptr;
|
||||
ipv4 = new Tins::IP((uint8_t*)data, data_size);
|
||||
if (tcp){
|
||||
tcp = ipv4->find_pdu<Tins::TCP>();
|
||||
@@ -311,7 +318,10 @@ class PktRequest {
|
||||
set_packet(raw_pkt, raw_pkt_size);
|
||||
reserialize();
|
||||
action = FilterAction::MANGLE;
|
||||
}catch(...){
|
||||
}catch(const std::exception& e){
|
||||
#ifdef DEBUG
|
||||
cerr << "[DEBUG] [PktRequest.mangle_custom_pkt] " << e.what() << endl;
|
||||
#endif
|
||||
action = FilterAction::DROP;
|
||||
}
|
||||
perfrom_action(false);
|
||||
|
||||
@@ -148,7 +148,7 @@ class PyProxyQueue: public NfQueue::ThreadNfQueue<PyProxyQueue> {
|
||||
case PyFilterResponse::MANGLE:
|
||||
pkt->mangle_custom_pkt(result.mangled_packet->c_str(), result.mangled_packet->size());
|
||||
if (pkt->get_action() == NfQueue::FilterAction::DROP){
|
||||
cerr << "[error] [filter_action] Failed to mangle: the packet sent is not serializzable... the packet was dropped" << endl;
|
||||
cerr << "[ERROR] [filter_action] Failed to mangle: Malformed Packet... the packet was dropped" << endl;
|
||||
print_blocked_reason(*result.filter_match_by);
|
||||
print_exception_reason();
|
||||
}else{
|
||||
|
||||
Reference in New Issue
Block a user