|
@@ -3,11 +3,16 @@
|
|
|
|
|
|
ProxyChannel::ProxyChannel(const std::string &innerInterface, const std::string &outerInterface, const std::string &ownIP, const std::string &partnerIP,
|
|
ProxyChannel::ProxyChannel(const std::string &innerInterface, const std::string &outerInterface, const std::string &ownIP, const std::string &partnerIP,
|
|
const std::string &filterIP, const std::string &filterPort, const bool relayOnly)
|
|
const std::string &filterIP, const std::string &filterPort, const bool relayOnly)
|
|
- : CovertChannel(innerInterface, outerInterface, "not (proto tcp and dst host " + filterIP + " and dst port " + filterPort + ")",
|
|
|
|
- "not ((proto tcp and src host " + filterIP + " and src port " + filterPort + ") or (proto tcp and src host " + partnerIP +
|
|
|
|
- " and src port " + filterPort + ") or (dst host " + ownIP + "))",
|
|
|
|
- "proto tcp and dst host " + filterIP + " and dst port " + filterPort, "proto tcp and src host " + filterIP + " and src port " + filterPort,
|
|
|
|
- "proto tcp and src host " + partnerIP + " and src port " + filterPort),
|
|
|
|
|
|
+ : CovertChannel(innerInterface, outerInterface, "not (tcp and dst host " + filterIP + " and dst port " + filterPort + ")",
|
|
|
|
+
|
|
|
|
+ "not ((tcp and src host " + filterIP + " and src port " + filterPort + ") or (proto tcp and src host " + partnerIP + " and src port " +
|
|
|
|
+ filterPort + ") or (dst host " + ownIP + "))",
|
|
|
|
+
|
|
|
|
+ "tcp and dst host " + filterIP + " and dst port " + filterPort,
|
|
|
|
+
|
|
|
|
+ "tcp and src host " + filterIP + " and src port " + filterPort,
|
|
|
|
+
|
|
|
|
+ "tcp and src host " + partnerIP + " and src port " + filterPort),
|
|
relayOnly(relayOnly), ownAddress(ownIP), partnerAddress(partnerIP), filterAddress(filterIP) {}
|
|
relayOnly(relayOnly), ownAddress(ownIP), partnerAddress(partnerIP), filterAddress(filterIP) {}
|
|
|
|
|
|
ProxyChannel::~ProxyChannel() {}
|
|
ProxyChannel::~ProxyChannel() {}
|
|
@@ -20,11 +25,12 @@ bool ProxyChannel::handleChannelFromOuter(Tins::PDU &pdu) {
|
|
// redirect to partner
|
|
// redirect to partner
|
|
ip.src_addr(ownAddress);
|
|
ip.src_addr(ownAddress);
|
|
ip.dst_addr(partnerAddress);
|
|
ip.dst_addr(partnerAddress);
|
|
-
|
|
|
|
|
|
+ pdu.inner_pdu(ip);
|
|
outerSender.send(pdu);
|
|
outerSender.send(pdu);
|
|
} else {
|
|
} else {
|
|
// should already be addressed right
|
|
// should already be addressed right
|
|
innerSender.send(pdu);
|
|
innerSender.send(pdu);
|
|
|
|
+ std::cout << "channel from outer" << std::endl;
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -37,7 +43,9 @@ bool ProxyChannel::handleChannelFromInner(Tins::PDU &pdu) {
|
|
// TODO: add pdu to a list to check later how to route it
|
|
// TODO: add pdu to a list to check later how to route it
|
|
} else {
|
|
} else {
|
|
ip.dst_addr(partnerAddress);
|
|
ip.dst_addr(partnerAddress);
|
|
|
|
+ pdu.inner_pdu(ip);
|
|
outerSender.send(pdu);
|
|
outerSender.send(pdu);
|
|
|
|
+ std::cout << "channel from inner" << std::endl;
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -48,12 +56,14 @@ bool ProxyChannel::handlePartnerFromOuter(Tins::PDU &pdu) {
|
|
// redirect to partner
|
|
// redirect to partner
|
|
ip.src_addr(ownAddress);
|
|
ip.src_addr(ownAddress);
|
|
ip.dst_addr(filterAddress);
|
|
ip.dst_addr(filterAddress);
|
|
-
|
|
|
|
|
|
+ pdu.inner_pdu(ip);
|
|
outerSender.send(pdu);
|
|
outerSender.send(pdu);
|
|
} else {
|
|
} else {
|
|
// should already be addressed right
|
|
// should already be addressed right
|
|
ip.src_addr(filterAddress);
|
|
ip.src_addr(filterAddress);
|
|
|
|
+ pdu.inner_pdu(ip);
|
|
innerSender.send(pdu);
|
|
innerSender.send(pdu);
|
|
|
|
+ std::cout << "partner" << std::endl;
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|