From 01bfac20c15edf1a032838654c410a53dafac6f9 Mon Sep 17 00:00:00 2001 From: huitema <huitema@huitema.net> Date: Tue, 18 Dec 2018 21:24:25 -0800 Subject: [PATCH] more difficult rebinding stress. --- picoquictest/tls_api_test.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/picoquictest/tls_api_test.c b/picoquictest/tls_api_test.c index 4b6457c7..d22416a5 100644 --- a/picoquictest/tls_api_test.c +++ b/picoquictest/tls_api_test.c @@ -3825,6 +3825,7 @@ int migration_stress_test() int nb_trials = 0; const int max_trials = 10000; int nb_inactive = 0; + int client_rebinding_done = 0; struct sockaddr_in hack_address; struct sockaddr_in hack_address_random; uint64_t loss_mask_data = 0; @@ -3910,11 +3911,21 @@ int migration_stress_test() } } - /* Packet reinjection at the client if using the special address */ - if (test_ctx->s_to_c_link->last_packet != NULL && - picoquic_compare_addr((struct sockaddr *)&hack_address, (struct sockaddr *)&test_ctx->s_to_c_link->last_packet->addr_to) == 0) - { - picoquic_store_addr(&test_ctx->s_to_c_link->last_packet->addr_to, (struct sockaddr *)&test_ctx->client_addr); + /* Initially, the attacker relays packets to the client. Then, it gives up */ + if (test_ctx->cnx_server->pkt_ctx[picoquic_packet_context_application].send_sequence < 256) { + /* Packet reinjection at the client if using the special address */ + if (test_ctx->s_to_c_link->last_packet != NULL && + picoquic_compare_addr((struct sockaddr *)&hack_address, (struct sockaddr *)&test_ctx->s_to_c_link->last_packet->addr_to) == 0) + { + picoquic_store_addr(&test_ctx->s_to_c_link->last_packet->addr_to, (struct sockaddr *)&test_ctx->client_addr); + } + } + + /* At some point, the client does migrate to a new address */ + if (!client_rebinding_done && test_ctx->cnx_server->pkt_ctx[picoquic_packet_context_application].send_sequence > 128) { + test_ctx->client_addr.sin_port += 17; + test_ctx->client_use_nat = 1; + client_rebinding_done = 1; } } -- GitLab