1
0
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:
Matias Fontanini
2015-08-17 15:19:03 -07:00
parent ab61907a06
commit 6dec68128d
19 changed files with 386 additions and 59 deletions

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}