From d6ae7c79f78a97e13d638d40261c8488b100b0c8 Mon Sep 17 00:00:00 2001 From: luwenpeng Date: Thu, 16 May 2024 14:14:41 +0800 Subject: [PATCH] Add test case: inject IPv4 based TCP RST packet after recv S2C first payload --- test/README.md | 3 +- test/gtest_inject_tcp_rst.cpp | 32 ++++++++++++++++++ test/packet_injector_test_frame.cpp | 6 ++-- .../raw/fw.pcap | Bin 0 -> 7844 bytes .../raw/virtio_dign_c.pcap | Bin 0 -> 623 bytes .../raw/virtio_dign_s.pcap | Bin 0 -> 1508 bytes ...ct-192.0.2.110:80-192.0.2.211:54408-2.pcap | Bin 0 -> 94 bytes ...ct-192.0.2.211:54408-192.0.2.110:80-1.pcap | Bin 0 -> 94 bytes .../test/input.pcap | Bin 0 -> 4240 bytes 9 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/raw/fw.pcap create mode 100644 test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/raw/virtio_dign_c.pcap create mode 100644 test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/raw/virtio_dign_s.pcap create mode 100644 test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/expect-192.0.2.110:80-192.0.2.211:54408-2.pcap create mode 100644 test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/expect-192.0.2.211:54408-192.0.2.110:80-1.pcap create mode 100644 test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/input.pcap diff --git a/test/README.md b/test/README.md index d0ce9ff..736eb10 100644 --- a/test/README.md +++ b/test/README.md @@ -38,4 +38,5 @@ curl -v http://http.badssl.selftest.gdnt-cloud.website --resolve "http.badssl.se | tcp-rst | c2s-packet | 1 | After recv SYN | Failed | | tcp-rst | s2c-packet | 1 | After recv SYN-ACK | Success | | tcp-rst | c2s-packet | 2 | After recv Sub-ACK | Success | -| tcp-rst | c2s-packet | 3 | Atter recv C2S First-Payload | Success | \ No newline at end of file +| tcp-rst | c2s-packet | 3 | After recv C2S First-Payload | Success | +| tcp-rst | s2c-packet | 3 | After recv S2C First-payload | Success | \ No newline at end of file diff --git a/test/gtest_inject_tcp_rst.cpp b/test/gtest_inject_tcp_rst.cpp index 05edaac..267645c 100644 --- a/test/gtest_inject_tcp_rst.cpp +++ b/test/gtest_inject_tcp_rst.cpp @@ -98,6 +98,38 @@ TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_C2S_FIRST_PAYLOAD) } #endif +#if 1 +TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_S2C_FIRST_PAYLOAD) +{ + struct packet_injector_case test = { + // descriptor + .finish_clean_work_dir = 1, + .descriptor = "Inject IPv4 based TCP RST after receiving S2C first payload packet.", + .work_dir = "/tmp/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/", // user defined work directory + + // prefix + .input_prefix = "pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/", + .output_prefix = "/tmp/", + + // input pcap + .input_pcap = "input.pcap", + + // compare + .c2s_expect_pcap = "expect-192.0.2.211:54408-192.0.2.110:80-1.pcap", + .c2s_output_pcap = "inject-192.0.2.211:54408-192.0.2.110:80-1.pcap", + + .s2c_expect_pcap = "expect-192.0.2.110:80-192.0.2.211:54408-2.pcap", + .s2c_output_pcap = "inject-192.0.2.110:80-192.0.2.211:54408-2.pcap", + + // packet injector command + .packet_injector_cmd = "./packet_injector -t tcp-rst -c s2c-packet -n 3", + .diff_skip_pattern = "-I frame.time -I frame.time_epoch -I ip.id -I ip.ttl -I ip.checksum -I tcp.checksum -I tcp.window_size", + }; + + packet_injector_test_frame_run(&test); +} +#endif + int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); diff --git a/test/packet_injector_test_frame.cpp b/test/packet_injector_test_frame.cpp index a131ac5..09b1c32 100644 --- a/test/packet_injector_test_frame.cpp +++ b/test/packet_injector_test_frame.cpp @@ -83,10 +83,6 @@ static void expect_cmp_inject(const char *work_dir, const char *output_dir_abs_path, const char *output_pcap_file, const char *diff_skip_pattern, const char *flow_dir) { - printf("\033[32m ============================================= \033[0m\n"); - printf("\033[32m Compare [%s] expect pcap and output pcap \033[0m\n", flow_dir); - printf("\033[32m ============================================= \033[0m\n"); - struct stat s; char expect_pcap_file_abs_path[1024] = {0}; char output_pcap_file_abs_path[1024] = {0}; @@ -136,7 +132,9 @@ static void expect_cmp_inject(const char *work_dir, void packet_injector_test_frame_run(struct packet_injector_case *test) { + printf("\033[32m ============================================= \033[0m\n"); printf("\033[32mTest: %s\033[0m\n", test->descriptor); + printf("\033[32m ============================================= \033[0m\n"); char config_file_abs_path[1024] = {0}; char input_dir_abs_path[1024] = {0}; diff --git a/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/raw/fw.pcap b/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/raw/fw.pcap new file mode 100644 index 0000000000000000000000000000000000000000..d7cf36066c8944233d0a366da3f580b83796c2c5 GIT binary patch literal 7844 zcmds6OKclO7@j;D8W)RFkU;Ha@PU@rYp>t-Vy7v6il#JxTRUPY(ZU5vR1iTNI1s@BA@TVCUE6VM14&;vwKdw^ z+1Y>onQy-NznSs*{k~yB$d2r~m0fWCtM=<5E6I>Q~I`hn)VW3F(GAW;)5DXj)jf5B~d3z0iMWzmvR) zEGL$t3nKia_^2d`3$Pb4tw_yY^vl;@`t9Ae_OM99uOYZcKk+x`UmsB|bxevDdeFD$ z4sOxjUrERXzGc$rn`^6XqkUUzwql;GeTP>6WS&M_HCK9oPTgYO}b_;cpN8P$?d4g(8 zR;5&sa#=T|WRNPdB`Z3g!aSv77r-Ye0=$7n=&B>N^$FjDyA7uiTg3R+CXD;4k=d(- zF^)gP7_s&+eudcoBgWB8G!;w5qp?ILnMlVo$+n;u^aWy0I~jAt`eI&JUW+y`_ZaQ5 z+v7DMgTU)|_9CYtoh8Fx><_Lv_C0X>%<&a}?mu^Yj@Q%2X6{FBxAJ-p^ESMWFJ4|p z774E(w_;Zf<9YG=8e)94dEJSa*Li)eX)Zs!F+O__%(a+W;&pu01oHamGUPOJyB4p{ z0JmqJSx(mXzXega3uEi&m2-m#%YLt*VCMhnBtth2|B&5#XdX|pM3-J zFtuR&;;Ko+_Q8o`&hRe113_2}S(AZDmk5RO8$VjmoOy7$Jul zMa~=^Dyb$H6r)^GLlbP&(K++`c7cEuHk3efNhn5)a4M8chD5(_gQ74CGS`OJ`h9+o zdM#t<9OQN67y?bTz%c~v=v=LbV+Y63Pfhc~<87zE})nY6R8+3tB7g>E!tX#}baIW_|JPs$^sSXjwPJPaek@wB$R~ z78r+W>xP-JQ_~sH7lZxVy%^-J8Kz<3KW}|;4Yg$3CE;c0i%!&zb$!ts8)nX5d2E|` z{ExBW8e%)Yb;6~`hEBw~9ve_d*0tom$I`Q`hY(B`^SI}slP8eJ-5<5(@$F>raOy%H z*Ht8qiXz>)-S2yl*;Qss)GX=dBBqhk%x+CxRZ7iD{xVeO4 zkJ9Wo<1$q=*@o@NT%f{>LOL+_!j#8ZE>P9k1a5@}sN(fRE-<01T+6{WvaT?}eSn=# zQ|G#D2#z8fEEn<2;HD$BnUM=P8kkTjoa$gDKsB2cbAd2EIN_oUhRUX3Gc^P^fw1es z+_$o28BE~iilPZ^K5u+$nWfsdT;~QGnCBuQ8}^E0hs;&#@F{~i8e`D#nzwFNNO2sm zaqi>5Xjz@2PtZ|W87tZ4iV2`YJMN}WWy4+pUp9<8sL=aZ6fUY>rMj96)Vk9%rbVb* zJQpZJFAI*o7Y19pI&ruAn$CAYgl!0G5vU~$)eQLHTC3F^v;*zdL5G2RZP!89a6W7s z>)iF(f^zG5n%xn_ciK%5Rz2^L@N+@C&cVBp>0qu3q zG@y;`&NLv~JJ4vHTC_ddfOCxzTGuhn8ui%2bJ$)S+ekCEEgBWE&AquGZ2ya^iwN6G Jc}fj>g<4K+`WR5c=0~X92?Gdvl)#f=q{*tPV8U z31|}tW4PHwx*Y6gZjh-U)1hv@1T_6=g8+j)=VqWA8A0y7#{x1Liui7SDofiQ-N zv!yFQCeB=p)kFyf`&+E2Cc3+ZDCjGAgoFg>8|oSIa(Uzzmslxel#~?cB_*a57w6~| zr{<)Uq!yRxrKjYT=qBgnm!{~IrzRC=mZb7>g%+n4={lyT<^eS&mloydo9mgG=^5~H zIVLBk761jc^tE`oc)@}E94RO;0@-B!0+7R5AAy1a0c<7)h_DFTu4Z5W09nw>s{jB1 literal 0 HcmV?d00001 diff --git a/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/raw/virtio_dign_s.pcap b/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/raw/virtio_dign_s.pcap new file mode 100644 index 0000000000000000000000000000000000000000..2419859cdc682b1828d5816d9529612be694a1ae GIT binary patch literal 1508 zcma)+O>7%Q6vroyQ@M*QA>dFcmtjw#cz5mCagwdqb!km2+E4?IDh?dhyJPRjn^|jT z){cXakhnyG0|yR#s3Iu`#Hke@5~r#X=Ym>ts#+^TgfkL1B&xpIb?SuV(3PHcXZF3{ zd-H!Yv-8XM+bNVrlP8U)V6gj9y?x_u2E75_(*D}`=i}9N_TcBQ-~1$l>IhY4`!!TM z@n!lBO8pMTb~aI?d+X6XN!m*N`!{)-W`2*BACF>ofC0W+`84$k%nzSRtuV&XJ@r!ScC7wcOAIuykUaU8< zfiE?i4WpnJvdX1^3ln=n^z@ePa_;M#_-#SB&^s;@n&StNs}D$vQ$e!IDkq_Ku0t3E zIZ@~vi+Z`N=d;Q=$00qKJZ+rLD%n`%Zx2XuMC8)VEm`=?A5sQc{8;3@?yb=>NKrd^ zIVn65c$Ah>lzz(~GL2&UKXLln&233c-9DCh3e`SeJWSjd0ng|2`0C}X@(v06Bs4MW zP_{1R$?HWtx7v!Bh+fGm7i>XH-1MRxE|l?#J%qsd63!RRg|Z1V7gw5D<$S;dsG~K9 zJ#ZFeT^OEN^Cv&95Y`c%i5H5X{uP@GZ6$DNn-Uk;5y|2F;sN%&xv*fCN>AC0ID!Vu z#9cyqn(fm*G^O6OJ0@1k<>K=4QZcX17m6w*v>lIVvYs&TVNrp`MG%5}(kkt3n{@~` zaccv@)IFuVd}F(6G<#xU14LMaZC5ie005Ja90~vc literal 0 HcmV?d00001 diff --git a/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/expect-192.0.2.211:54408-192.0.2.110:80-1.pcap b/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/expect-192.0.2.211:54408-192.0.2.110:80-1.pcap new file mode 100644 index 0000000000000000000000000000000000000000..d5765f7f9e32c7ca3be274326b0e9433aa33830c GIT binary patch literal 94 zcmca|c+)~A1{MYcU}0bcavn6hrY$fddRomw`C%N(Vzg_J(_wIvNW(0z_DZtvVPO0GPZRCIA2c literal 0 HcmV?d00001 diff --git a/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/input.pcap b/test/pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/input.pcap new file mode 100644 index 0000000000000000000000000000000000000000..e8a2683b10540d678ebdb3af5c9a3e025157fe1a GIT binary patch literal 4240 zcmeHKO>Epm6rTLFG=>$03srL&_Eg%n*UtXN-Az-P(26!Rz*Y#Avhv#F^(bE3vd6ng z5fb852`=2)qKY86aB3w$LP8*J95^7_o=O`D)FO_JxFPZLo_9A1%@*ZQ1W0i-`#jI@ zy?OJ#nQtaiDkaSmLgp$5_6~vkqxX!Ez2pS<;ze3ew34C~WKCgiSy?O>>%}}FqvR3N z3Ii){1+=XxD!3AigE3}$5(F6o%^1jG_+?&Hv{f%a<44JE5|~_8;nDLAT~)g=`o4WR zFoxy@+Ta+dUK@WJ-Z3A1*7Mj&tiW2(C+^8%vWz(-{?lN8|9SNMbLjsVX~n87@DBXPH4Bma0kerzyJ1$ zZ$AI}?z8ZY?WeQ9yme~PyYbn3&%M2i%o0)=Z%>oyofk*HBE#39dDqX8`GqUDz5`>j zJpAij?-@XCbjK&7!@Hz22X6g_`k|2#39%f7hU1OGALjNB5sMib_@StCuNkr^(sR8& z>vbnGlt*<)*$kN>n674Miy2WIvKI41T`UDmFDEvp2;D|(qeWmWxxQi5ecO(hKuuC( ze2HKX?t67^Vb3ul2kIZ{rE;O5=1K)9E#!58MBJh-kA!|Yr>bY@>Az`UUnUk0F&?w) zF83CC(M4$3HaFK)#X=!hNQ?r;!o+BZypoI+8Xf8|!_rF`Dh%%G#SAr#z%aR3LY*0h zb;wEAVBNzcxE1LGbHeYC?po3?odnx^F^)f+SnXrnMYoG|7h^&Y<4?~bzR<3b`RnI0 z`!3xEoUblF{`HXXoO}EDD&TzQjoswX*vEk05boiXQN$P!->`r0i|zLQec<~SF~$8m14Zw1 z^cNTMs~>?5+a_$^9bZIjFMKc%+dbsa4G6Ol+oQ8Jnx)5TwfU^3XesHK56nj$Ap)gg zSW)CE5p!+9BB3-bPspb0$ClDzjfe}Dl1{+^CLeABAL~d|ZnmTpi;9|(4x1(mK)FA= zKP9E$2-sdj|I!(NYX{fRMt=BVytu{>o6dmzxUc zT|-^|Ux5RCOZ>3S{r?z0AUX8;;mudet89c2Z1-Y2^3vt^5!>M}2V%R2OrJ0P727^D z&eR3%6Eood9Mh@VPHGk8;@H7Cwctw`sLC2*X`Q#Gd- ziaKbH&ec-V5#JL)8FCG;a8$5Gk#$7NUH@=`c}?Nyw2%WzI$=aYp7Skkb7n#8m}RJ1 z+7Np}FBJ5Ael51gOt@ToI$dBakPVl&fvIL|MpLKhVlg*4S@A8-Yg5fn;q|?R{P#_Xn<;j_oM`|z6&jLrb+$pKj7jT1{k|?dTm@ug6 z7$ICgtLa$Sayh;J!82N{nr?H}!K-hYn%zoN(;aRJrwacXaFfYN2X3|=7u;~=$TVD5 z)w*Hul1W46R@0FKA_De*3n>;EDSRxf$WW%EZV6ppKaUx_rUoNN$*c~tFB`J literal 0 HcmV?d00001