mirror of
https://github.com/mfontanini/libtins
synced 2026-01-23 02:35:57 +01:00
Add remove_option member to IP, TCP, Dot11, ICMPv6, DHCP and DHCPv6
This commit is contained in:
@@ -276,7 +276,7 @@ TEST_F(DHCPTest, ConstructorFromBuffer) {
|
||||
DHCP dhcp1(expected_packet, sizeof(expected_packet));
|
||||
std::vector<IPv4Address> routers, expected_routers;
|
||||
expected_routers.push_back("192.168.0.1");
|
||||
expected_routers.push_back("127.0.0.1");
|
||||
expected_routers.push_back("127.0.0.1");
|
||||
|
||||
EXPECT_EQ(dhcp1.opcode(), DHCP::DISCOVER);
|
||||
EXPECT_EQ(dhcp1.htype(), 1);
|
||||
@@ -305,4 +305,15 @@ TEST_F(DHCPTest, Serialize) {
|
||||
test_equals(dhcp1, dhcp2);
|
||||
}
|
||||
|
||||
TEST_F(DHCPTest, RemoveOption) {
|
||||
DHCP dhcp;
|
||||
PDU::serialization_type old_buffer = dhcp.serialize();
|
||||
dhcp.domain_name("libtins.github.io");
|
||||
dhcp.server_identifier("192.168.0.1");
|
||||
|
||||
EXPECT_TRUE(dhcp.remove_option(DHCP::DOMAIN_NAME));
|
||||
EXPECT_TRUE(dhcp.remove_option(DHCP::DHCP_SERVER_IDENTIFIER));
|
||||
|
||||
PDU::serialization_type new_buffer = dhcp.serialize();
|
||||
EXPECT_EQ(old_buffer, new_buffer);
|
||||
}
|
||||
|
||||
@@ -334,3 +334,17 @@ TEST_F(DHCPv6Test, Client_Server_ID_DUIDEN) {
|
||||
EXPECT_EQ(tmp.id, tmp2.id);
|
||||
EXPECT_EQ(tmp.data, tmp2.data);
|
||||
}
|
||||
|
||||
TEST_F(DHCPv6Test, RemoveOption) {
|
||||
DHCPv6 dhcp;
|
||||
PDU::serialization_type old_buffer = dhcp.serialize();
|
||||
|
||||
dhcp.server_unicast("fe00:0a9d:dd23::1");
|
||||
dhcp.preference(12);
|
||||
|
||||
EXPECT_TRUE(dhcp.remove_option(DHCPv6::UNICAST));
|
||||
EXPECT_TRUE(dhcp.remove_option(DHCPv6::PREFERENCE));
|
||||
|
||||
PDU::serialization_type new_buffer = dhcp.serialize();
|
||||
EXPECT_EQ(old_buffer, new_buffer);
|
||||
}
|
||||
|
||||
@@ -407,7 +407,6 @@ TEST_F(Dot11BeaconTest, RSNInformationTest) {
|
||||
EXPECT_EQ(rsn_info.akm_cyphers(), found.akm_cyphers());
|
||||
}
|
||||
|
||||
|
||||
TEST_F(Dot11BeaconTest, PCAPLoad1) {
|
||||
const uint8_t buffer[] = {
|
||||
128, 0, 0, 0, 255, 255, 255, 255, 255, 255, 244, 236, 56, 254, 77,
|
||||
@@ -460,4 +459,18 @@ TEST_F(Dot11BeaconTest, Serialize) {
|
||||
EXPECT_TRUE(std::equal(buffer.begin(), buffer.end(), expected_packet));
|
||||
}
|
||||
|
||||
TEST_F(Dot11BeaconTest, RemoveOption) {
|
||||
Dot11Beacon dot11;
|
||||
PDU::serialization_type old_buffer = dot11.serialize();
|
||||
|
||||
dot11.challenge_text("libtins ftw");
|
||||
dot11.power_constraint(0x1e);
|
||||
|
||||
EXPECT_TRUE(dot11.remove_option(Dot11::CHALLENGE_TEXT));
|
||||
EXPECT_TRUE(dot11.remove_option(Dot11::POWER_CONSTRAINT));
|
||||
|
||||
PDU::serialization_type new_buffer = dot11.serialize();
|
||||
EXPECT_EQ(old_buffer, new_buffer);
|
||||
}
|
||||
|
||||
#endif // HAVE_DOT11
|
||||
|
||||
@@ -469,3 +469,20 @@ TEST_F(ICMPv6Test, ChecksumCalculation) {
|
||||
const ICMPv6& icmp = eth.rfind_pdu<ICMPv6>();
|
||||
EXPECT_EQ(0x68bd, icmp.checksum());
|
||||
}
|
||||
|
||||
TEST_F(ICMPv6Test, RemoveOption) {
|
||||
ICMPv6 icmp;
|
||||
PDU::serialization_type old_buffer = icmp.serialize();
|
||||
|
||||
ICMPv6::recursive_dns_type data(0x9283712);
|
||||
data.servers.push_back("827d:adae::1");
|
||||
data.servers.push_back("2929:1234:fefe::2");
|
||||
icmp.recursive_dns_servers(data);
|
||||
icmp.timestamp(0x2837d6aaa231ULL);
|
||||
|
||||
EXPECT_TRUE(icmp.remove_option(ICMPv6::TIMESTAMP));
|
||||
EXPECT_TRUE(icmp.remove_option(ICMPv6::RECURSIVE_DNS_SERV));
|
||||
|
||||
PDU::serialization_type new_buffer = icmp.serialize();
|
||||
EXPECT_EQ(old_buffer, new_buffer);
|
||||
}
|
||||
|
||||
@@ -695,3 +695,26 @@ TEST_F(IPTest, SpoofedOptions) {
|
||||
EXPECT_EQ(3U, pdu.options().size());
|
||||
EXPECT_EQ(pdu.serialize().size(), pdu.size());
|
||||
}
|
||||
|
||||
TEST_F(IPTest, RemoveOption) {
|
||||
IP ip(TINS_DEFAULT_TEST_IP);
|
||||
PDU::serialization_type old_buffer = ip.serialize();
|
||||
|
||||
// Add a record route option
|
||||
IP::record_route_type record_route(0x2d);
|
||||
record_route.routes.push_back("192.168.2.3");
|
||||
record_route.routes.push_back("192.168.5.1");
|
||||
ip.record_route(record_route);
|
||||
|
||||
// Add a lsrr option
|
||||
IP::lsrr_type lsrr(0x2d);
|
||||
lsrr.routes.push_back("192.168.2.3");
|
||||
lsrr.routes.push_back("192.168.5.1");
|
||||
ip.lsrr(lsrr);
|
||||
|
||||
EXPECT_TRUE(ip.remove_option(IP::option_identifier(IP::LSRR, IP::CONTROL, 1)));
|
||||
EXPECT_TRUE(ip.remove_option(IP::option_identifier(IP::RR, IP::CONTROL, 0)));
|
||||
|
||||
PDU::serialization_type new_buffer = ip.serialize();
|
||||
EXPECT_EQ(old_buffer, new_buffer);
|
||||
}
|
||||
|
||||
@@ -263,3 +263,22 @@ TEST_F(TCPTest, SpoofedOptions) {
|
||||
EXPECT_EQ(3U, pdu.options().size());
|
||||
EXPECT_EQ(pdu.serialize().size(), pdu.size());
|
||||
}
|
||||
|
||||
TEST_F(TCPTest, RemoveOption) {
|
||||
TCP tcp(22, 987);
|
||||
uint8_t a[] = { 1,2,3,4,5,6 };
|
||||
// Add an option
|
||||
tcp.mss(1400);
|
||||
PDU::serialization_type old_buffer = tcp.serialize();
|
||||
|
||||
// Add options and remove them. The serializations before and after should be equal.
|
||||
tcp.add_option(TCP::option(TCP::SACK, 250, a, a + sizeof(a)));
|
||||
tcp.add_option(TCP::option(TCP::SACK_OK));
|
||||
tcp.add_option(TCP::option(TCP::NOP));
|
||||
EXPECT_TRUE(tcp.remove_option(TCP::SACK));
|
||||
EXPECT_TRUE(tcp.remove_option(TCP::SACK_OK));
|
||||
EXPECT_TRUE(tcp.remove_option(TCP::NOP));
|
||||
|
||||
PDU::serialization_type new_buffer = tcp.serialize();
|
||||
EXPECT_EQ(old_buffer, new_buffer);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user