<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: f0rked</title>
    <description>The latest articles on DEV Community by f0rked (@yetanotherf0rked).</description>
    <link>https://dev.to/yetanotherf0rked</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F840996%2Fbf5a3384-e344-467e-8050-bd8b5974e7f3.png</url>
      <title>DEV Community: f0rked</title>
      <link>https://dev.to/yetanotherf0rked</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yetanotherf0rked"/>
    <language>en</language>
    <item>
      <title>Spending spring days crafting packets at NahamCon 2022</title>
      <dc:creator>f0rked</dc:creator>
      <pubDate>Mon, 30 May 2022 15:20:08 +0000</pubDate>
      <link>https://dev.to/stack-labs/spending-spring-days-crafting-packets-at-nahamcon-2022-3nma</link>
      <guid>https://dev.to/stack-labs/spending-spring-days-crafting-packets-at-nahamcon-2022-3nma</guid>
      <description>&lt;p&gt;&lt;em&gt;A CTF writeup of Networking challenges at NahamCon 2022&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05gftl21hx49hktmbe01.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05gftl21hx49hktmbe01.jpg" alt="why not both?" width="524" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NahamCon2022 is over and we're glad we managed to finish in top 5% with our team at Stack Labs (3049 points, 195 on 4034 teams). This year, they came up with exciting Networking challenges made by &lt;strong&gt;@Kkevsterrr#7469&lt;/strong&gt;. Although we didn't manage to solve these, it was a nice introduction to network analysis and packets manipulation using &lt;strong&gt;Scapy&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Here's what I learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1. Contemporaneous Open&lt;/strong&gt; - hard - 14 solves - 500 points - first blooded by &lt;strong&gt;StaticFlow&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2. Freaky Flag Day&lt;/strong&gt; - hard - 9 solves - 500 points - first blooded by &lt;strong&gt;Maple Bacon&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Contemporaneous Open
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Author: @Kkevsterrr#7469&lt;/strong&gt; &lt;br&gt;
We want to give you the flag, we really do. just give us a TCP HTTP server to send it to, and we'll make a POST request with all the deets you need! we've just got a firewall issue on our side and we're dropping certain important packets (specifically, any inbound SYN+ACK packet is dropped). Shouldn't be a problem for a networking pro like you, though - just make a TCP server that doesn't need to send those!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Tools used:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/secdev/scapy" rel="noopener noreferrer"&gt;scapy&lt;/a&gt; for packet manipulation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tshark.dev/" rel="noopener noreferrer"&gt;tshark&lt;/a&gt; wireshark's cli version&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Traditional 3-way handshake
&lt;/h3&gt;

&lt;p&gt;Let's start with some useful reminders about TCP Protocol. In a traditional TCP 3-way handshake:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the client sends a &lt;strong&gt;SYN&lt;/strong&gt; (Synchronize Sequence Number) to inform the server he wants to start a communication. The SYN signifies with what sequence number it will start the segments with.&lt;/li&gt;
&lt;li&gt;the server responds to the client with &lt;strong&gt;SYN-ACK&lt;/strong&gt;. The ACK signifies the response of client's SYN. Meanwhile the SYN signifies with what sequence number it will start the segments with.&lt;/li&gt;
&lt;li&gt;Finally, the client acknowledges (&lt;strong&gt;ACK&lt;/strong&gt;) the response of the server and the connection enters the ESTABLISHED state so they can start exchanging data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bxvxb6djx6ell4vlrlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bxvxb6djx6ell4vlrlz.png" alt="TCP 3-Way Handshake" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  SYN-ACK get dropped by a distrustful firewall
&lt;/h3&gt;

&lt;p&gt;In this challenge the flag is given by a POST request to a server we're supposed to create at port 80. The thing is: the client's firewall drops every inbound SYN-ACK packet. So we must find a solution to establish a connection without having to send a SYN-ACK-flagged packet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhih0gabpzedty44bib5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhih0gabpzedty44bib5.jpg" alt="SYN-ACKs get dropped by client's firewall" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While I was spending hours refreshing my memory about TCP/IP internals, learning the basics of scapy and exploring many ways to solve the problem (fragmenting the SYN/ACK response, attempting an &lt;a href="https://www.auvik.com/franklyit/blog/what-is-quic-protocol/" rel="noopener noreferrer"&gt;HTTP3 over QUIC conection&lt;/a&gt;), the solution was laying in the challenge's name.&lt;/p&gt;

&lt;h3&gt;
  
  
  TCP Simultaneous Open
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Contemporaneous Open&lt;/em&gt; is a reference to &lt;strong&gt;TCP's Simultaneous Open&lt;/strong&gt; state transition. Also called "simultaneous active open on both side", it refers to an old TCP feature used to handle edge cases in TCP handshakes, as when a server and a client send a SYN to each other at the same time. This process makes it possible for two applications to send a SYN to each other to start a TCP connection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fxdifzpcu2hc4sa8g81.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fxdifzpcu2hc4sa8g81.jpg" alt="TCP Simultaneous Open" width="800" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When both ends send a SYN at the same time, both ends enter the SYN_SENT state. When they receive the SYN, their state changes to SYN_RCVD and they resend the SYN and acknowledge the received SYN. When they both receive the SYN and the acknowledged SYN, the connection enters the ESTABLISHED state. In such a state, both ends act as a client and server.&lt;/p&gt;

&lt;p&gt;So the client doesn't need a SYN/ACK answer from the server in order to complete the three-way handshake. &lt;strong&gt;All we need is to send a SYN and wait for the &lt;em&gt;client&lt;/em&gt;'s SYN/ACK to establish the connection and start HTTP exchange.&lt;/strong&gt; This can save us from sending a SYN/ACK packet that would be dropped by the client. We'll use Scapy to mimic a server with such a behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Crafting with scapy
&lt;/h3&gt;

&lt;p&gt;Before executing any Scapy scripts, we must disable the Linux Kernel's response to avoid any RST-flagged answers. Scapy operates in user space so the Kernel has no idea of what Scapy is doing.&lt;/p&gt;

&lt;p&gt;Using iptables, we can drop RST-flagged packets the kernel sends from port 80.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;iptables &lt;span class="nt"&gt;-A&lt;/span&gt; OUTPUT &lt;span class="nt"&gt;-p&lt;/span&gt; tcp &lt;span class="nt"&gt;--tcp-flags&lt;/span&gt; RST RST &lt;span class="nt"&gt;--sport&lt;/span&gt; 80 &lt;span class="nt"&gt;-j&lt;/span&gt; DROP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The idea is to create a customized server that does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;receive client's SYN (seq=n)&lt;/li&gt;
&lt;li&gt;send a SYN (seq=m)&lt;/li&gt;
&lt;li&gt;send a ACK (seq=m+1, ack=n+1) to acknowledge client's SYN&lt;/li&gt;
&lt;li&gt;client acknowledges our SYN, receives our ACK and establish session&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll use &lt;strong&gt;tshark&lt;/strong&gt; as a complementary tool to track the incoming packets.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. First, let's get client's SYN packet.
&lt;/h3&gt;

&lt;p&gt;Note that IP addresses have been changed to "MY_IP" and "CLIENT_IP".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# server.py
#! /usr/bin/python
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;scapy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="n"&gt;S_ADDR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MY_IP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;S_PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Listen for client's SYN and get IP and port
&lt;/span&gt;&lt;span class="n"&gt;c_syn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sniff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tcp and port 80&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Received SYN from {IP:%IP.src%:%TCP.dport%, seq=%TCP.seq}%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We connect to the challenge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ nc challenge.nahamcon.com 31334
so glad you&lt;span class="s1"&gt;'re here! i would love to give you the flag. just give me the IP address that'&lt;/span&gt;s running an HTTP server, and I&lt;span class="s1"&gt;'ll shoot you the flag immediately.
oh one snag, we'&lt;/span&gt;ve got some firewall issues on our side, and some important packets are getting dropped. shouldn&lt;span class="s1"&gt;'t be a problem for you, though.
&amp;gt;&amp;gt;&amp;gt; MY_IP
here it comes!
hmm nope looks like you didn'&lt;/span&gt;t get it...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# server.py output
Received SYN from CLIENT_IP:http, seq=510141201
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80"&lt;/span&gt;
Running as user &lt;span class="s2"&gt;"root"&lt;/span&gt; and group &lt;span class="s2"&gt;"root"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; This could be dangerous.
Capturing on &lt;span class="s1"&gt;'ens3'&lt;/span&gt;
    1 0.000000000 CLIENT_IP → MY_IP TCP 74 58356 → 80 &lt;span class="o"&gt;[&lt;/span&gt;SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;42600 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3977333110 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    2 1.015633580 CLIENT_IP → MY_IP TCP 74 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 58356 → 80 &lt;span class="o"&gt;[&lt;/span&gt;SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;42600 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3977334125 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great! We now can use the IP and port for sending our packets.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Now let's send our SYN and acknowledge client's SYN
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# server.py
# ...
&lt;/span&gt;
&lt;span class="c1"&gt;# 2. Send Syn
&lt;/span&gt;&lt;span class="n"&gt;C_ADDR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c_syn&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;
&lt;span class="n"&gt;C_PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c_syn&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;sport&lt;/span&gt;
&lt;span class="n"&gt;C_SEQ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c_syn&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;seq&lt;/span&gt;
&lt;span class="n"&gt;S_SEQ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1234&lt;/span&gt; &lt;span class="c1"&gt;# random number
&lt;/span&gt;
&lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S_ADDR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;C_ADDR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tcp_syn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;sport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S_PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;dport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;C_PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;S&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S_SEQ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;s_syn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tcp_syn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Send SYN with seq=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S_SEQ&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 3. Send Ack
&lt;/span&gt;&lt;span class="n"&gt;S_SEQ&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;C_SEQ&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;tcp_ack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;sport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S_PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;dport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;C_PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S_SEQ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;C_SEQ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;s_ack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tcp_ack&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Send ACK with seq=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S_SEQ&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; and ack=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;C_SEQ&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Received SYN from CLIENT_IP:http, seq=3800804531
Send SYN with seq=1234
Send ACK with seq=1235 and ack=3800804532
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll use the flag &lt;code&gt;-z "follow,tcp,hex,0"&lt;/code&gt; to display the contents of the first TCP Stream (CLIENT_IP → MY_IP)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80"&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"follow,tcp,hex,0"&lt;/span&gt;
Running as user &lt;span class="s2"&gt;"root"&lt;/span&gt; and group &lt;span class="s2"&gt;"root"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; This could be dangerous.
Capturing on &lt;span class="s1"&gt;'ens3'&lt;/span&gt;
    1 0.000000000 CLIENT_IP → MY_IP TCP 74 34206 → 80 &lt;span class="o"&gt;[&lt;/span&gt;SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;42600 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3979143134 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    2 0.009865804 MY_IP → CLIENT_IP TCP 54 80 → 34206 &lt;span class="o"&gt;[&lt;/span&gt;SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8192 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
    3 0.012471996 MY_IP → CLIENT_IP TCP 54 80 → 34206 &lt;span class="o"&gt;[&lt;/span&gt;ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8192 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
    4 0.114386572 CLIENT_IP → MY_IP TCP 74 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 34206 → 80 &lt;span class="o"&gt;[&lt;/span&gt;SYN, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;42600 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3979143248 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    5 0.115899112 CLIENT_IP → MY_IP TCP 268 POST / HTTP/1.1  &lt;span class="o"&gt;[&lt;/span&gt;TCP segment of a reassembled PDU]
    6 0.115899266 CLIENT_IP → MY_IP HTTP 104 POST / HTTP/1.1  &lt;span class="o"&gt;(&lt;/span&gt;application/x-www-form-urlencoded&lt;span class="o"&gt;)&lt;/span&gt;
    7 0.319132750 CLIENT_IP → MY_IP TCP 318 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 34206 → 80 &lt;span class="o"&gt;[&lt;/span&gt;PSH, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;333 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;264
    8 0.727116985 CLIENT_IP → MY_IP TCP 318 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 34206 → 80 &lt;span class="o"&gt;[&lt;/span&gt;PSH, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;333 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;264
    9 1.551128826 CLIENT_IP → MY_IP TCP 318 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 34206 → 80 &lt;span class="o"&gt;[&lt;/span&gt;PSH, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;333 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;264
   10 3.119495767 CLIENT_IP → MY_IP TCP 54 34206 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;265 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;333 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
   11 3.215170188 CLIENT_IP → MY_IP TCP 318 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 34206 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN, PSH, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;333 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;264
^C11 packets captured

&lt;span class="o"&gt;===================================================================&lt;/span&gt;
Follow: tcp,hex
Filter: tcp.stream eq 0
Node 0: CLIENT_IP:34206
Node 1: MY_IP:80
00000000  50 4f 53 54 20 2f 20 48  54 54 50 2f 31 2e 31 0d  POST / H TTP/1.1.
00000010  0a 48 6f 73 74 3a 20 ■   ■  ■  ■  ■  ■  ■  ■  ■   .Host: ■ ■■■■■■■■
00000020  ■  ■  ■  ■  0d 0a 55 73  65 72 2d 41 67 65 6e 74  ■■■■..Us er-Agent
00000030  3a 20 70 79 74 68 6f 6e  2d 72 65 71 75 65 73 74  : python &lt;span class="nt"&gt;-request&lt;/span&gt;
00000040  73 2f 32 2e 32 37 2e 31  0d 0a 41 63 63 65 70 74  s/2.27.1 ..Accept
00000050  2d 45 6e 63 6f 64 69 6e  67 3a 20 67 7a 69 70 2c  &lt;span class="nt"&gt;-Encodin&lt;/span&gt; g: &lt;span class="nb"&gt;gzip&lt;/span&gt;,
00000060  20 64 65 66 6c 61 74 65  0d 0a 41 63 63 65 70 74   deflate ..Accept
00000070  3a 20 2a 2f 2a 0d 0a 43  6f 6e 6e 65 63 74 69 6f  : &lt;span class="k"&gt;*&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;..C onnectio
00000080  6e 3a 20 6b 65 65 70 2d  61 6c 69 76 65 0d 0a 43  n: keep- alive..C
00000090  6f 6e 74 65 6e 74 2d 4c  65 6e 67 74 68 3a 20 35  ontent-L ength: 5
000000A0  30 0d 0a 43 6f 6e 74 65  6e 74 2d 54 79 70 65 3a  0..Conte nt-Type:
000000B0  20 61 70 70 6c 69 63 61  74 69 6f 6e 2f 78 2d 77   applica tion/x-w
000000C0  77 77 2d 66 6f 72 6d 2d  75 72 6c 65 6e 63 6f 64  ww-form- urlencod
000000D0  65 64 0d 0a 0d 0a                                 ed....
000000D6  66 6c 61 67 3d 66 6c 61  67 25 37 42 36 61 63 66  &lt;span class="nv"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fla g%7B6acf
000000E6  64 66 63 39 33 36 39 65  61 64 66 64 62 39 34 33  dfc9369e adfdb943
000000F6  39 62 30 61 63 33 39 36  39 37 31 31 25 37 44 25  9b0ac396 9711%7D%
00000106  30 41                                             0A
&lt;span class="o"&gt;===================================================================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And so we get this lovely flag:&lt;br&gt;
&lt;code&gt;flag{6acfdfc9369eadfdb9439b0ac3969711}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flr7w42b850dzzi1xtft0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flr7w42b850dzzi1xtft0.gif" alt="Yaaay!" width="480" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Improvements
&lt;/h3&gt;

&lt;p&gt;A much more elegant solution would be to act like a real HTTP server by acquitting each client's packet, answering the POST request and then gracefully ending the connection when the client sends a FIN.&lt;/p&gt;

&lt;p&gt;Check out &lt;strong&gt;&lt;a href="https://gist.github.com/nneonneo/1b371ac9da8703eda9c3a9b26d61a483" rel="noopener noreferrer"&gt;nneonneo&lt;/a&gt;&lt;/strong&gt;'s solution that implements this feature in addition to using an asynchronous sniffer that pushes incoming packets to a queue, making client's packets easier to iterate on. Also he uses many helper functions to track, filter and incoming and outcoming packets. I would definitely use these as a template for next challenges. Clean and smooth.&lt;/p&gt;

&lt;p&gt;In the next part, we'll cover the &lt;strong&gt;Freaky Flag Day&lt;/strong&gt; challenge. I hope you enjoy poetry and TCP flags.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Freaky Flag Day
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98agqmlixu0we6mfjptf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98agqmlixu0we6mfjptf.jpg" alt="Is this a FIN?" width="556" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Author: @Kkevsterrr#7469&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Our TCP flags have decided that they'd like to change places today; all you need to do is reach the HTTP server!  &lt;br&gt;&lt;br&gt;
Roses are red, and SYNs are FINs too.&lt;br&gt;&lt;br&gt;
RST+ACKs are now SYN+ACKs for you.&lt;br&gt;&lt;br&gt;
ACKs are now Es, and what else have we done?&lt;br&gt;&lt;br&gt;
PSH+ACKs are FIN+SYNs just for the fun.  &lt;br&gt;&lt;br&gt;
Hint: If you want to run this challenge from your home or a VM, make sure you are not behind a NAT that could eat your unexpected packets.&lt;br&gt;&lt;br&gt;
Interact with this challenge at: &lt;a href="http://SERVER_IP" rel="noopener noreferrer"&gt;http://SERVER_IP&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Tools used:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/secdev/scapy" rel="noopener noreferrer"&gt;scapy&lt;/a&gt; for packet manipulation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tshark.dev/" rel="noopener noreferrer"&gt;tshark&lt;/a&gt; wireshark's cli version&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://curl.se/" rel="noopener noreferrer"&gt;curl&lt;/a&gt; for the http client&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/oremanj/python-netfilterqueue" rel="noopener noreferrer"&gt;nfqueue&lt;/a&gt; to intercept packets queued by the kernel packet filter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So after defeating a suspicious client that drops every incoming SYN/ACK packet, our next challenger a server that swaps the flags of every request (both inbound and outbound).&lt;/p&gt;

&lt;p&gt;Want to establish a session? The server understands that you want to finish it.&lt;br&gt;
Want to acknowledge that a packet is successfully received? The server understands that you're under a network congestion. Nonsense.&lt;/p&gt;

&lt;p&gt;The goal is to reach the server correctly. Thus we must speak his language. The flags mapping is the following:&lt;/p&gt;

&lt;p&gt;S ⇔ F&lt;/p&gt;

&lt;p&gt;RA ⇔ SA&lt;/p&gt;

&lt;p&gt;A ⇔ E&lt;/p&gt;

&lt;p&gt;PA ⇔ FS&lt;/p&gt;
&lt;h3&gt;
  
  
  Preliminary tests
&lt;/h3&gt;

&lt;p&gt;Let's try to connect to the server using &lt;strong&gt;curl&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ curl &lt;span class="nt"&gt;--local-port&lt;/span&gt; 44444 http://SERVER_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80 and host SERVER_IP"&lt;/span&gt;
    1 0.000000000 MY_IP → SERVER_IP TCP 74 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64240 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1756025715 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    2 1.021102385 MY_IP → SERVER_IP TCP 74 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64240 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1756026736 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As expected, nothing happens as the SYN flag is interpreted as a FYN flag on server-side.&lt;/p&gt;

&lt;p&gt;Now let's use scapy and send a FIN-flagged with a random sequence number segment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#! /usr/bin/python
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;scapy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="n"&gt;C_ADDR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MY_IP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;C_PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;44444&lt;/span&gt;
&lt;span class="n"&gt;S_ADDR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SERVER_IP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;S_PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;
&lt;span class="n"&gt;C_SEQ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1234&lt;/span&gt; &lt;span class="c1"&gt;# random
&lt;/span&gt;
&lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;C_ADDR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S_ADDR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;sport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;C_PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;dport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;S_PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;C_SEQ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80 and host SERVER_IP"&lt;/span&gt;
    1 0.000000000 MY_IP → SERVER_IP TCP 54 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8192 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
    2 0.144079153 SERVER_IP → MY_IP TCP 58 80 → 44444 &lt;span class="o"&gt;[&lt;/span&gt;RST, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;65320 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server understands "SYN" and sends us RST-ACK (which is SYN-ACK). So now he must be waiting for a a ECN (which is an ACK)... And so on. You got it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Packet interception and modification with scapy and nfqueue
&lt;/h3&gt;

&lt;p&gt;We could rewrite an HTTP client with scapy using the modified flags. But it is a long and tedious task as we must craft every request with scapy. A less painful solution would be to have a layer that intercepts every packet and just update the flags before sending/accepting them. And that's where &lt;strong&gt;nfqueue&lt;/strong&gt; can help us.&lt;/p&gt;

&lt;p&gt;Using a standard http client like &lt;strong&gt;curl&lt;/strong&gt;, intercept all the incoming and outcoming packages with &lt;strong&gt;nfqueue&lt;/strong&gt;, pass them to our &lt;strong&gt;scapy&lt;/strong&gt; script that will change the flags accordingly and then send the modified packets to their destination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Netfilter Queue is an iptables target which gives the decision on packets to the userspace&lt;/strong&gt;. It is part of the Netfilter project that also provides iptables and nftables. It is commonly used as a proxy or for Man in the Middle attacks.&lt;/p&gt;

&lt;p&gt;To intercept packets with nfqueue you must set firewall's chain rules accordingly. In this situation we want to intercept:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incoming packets from SERVER_IP (INPUT chain)&lt;/li&gt;
&lt;li&gt;outgoing packets to SERVER_IP (OUTPUT chain)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiicb6ut7a2luhu333c7y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiicb6ut7a2luhu333c7y.jpg" alt="Intercepting packets with nfqueue" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's try this.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Let's set nfqueue
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/python3
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;netfilterqueue&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;NetfilterQueue&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;scapy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;S_ADDR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SERVER_IP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Update iptables rules
&lt;/span&gt;&lt;span class="n"&gt;output_rule&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iptables -A OUTPUT --destination &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S_ADDR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -j NFQUEUE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;input_rule&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iptables -A INPUT --source &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S_ADDR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -j NFQUEUE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;flush_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iptables -F OUTPUT &amp;amp;&amp;amp; iptables -F INPUT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_rule&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_rule&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Get a scapy object from raw packet
&lt;/span&gt;    &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_payload&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="c1"&gt;# Tell nfqueue to accept the packet
&lt;/span&gt;    &lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Init nfqueue
&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NetfilterQueue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unbind&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flush_rules&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First we update iptables rules to intercept the interesting packets to nfqueue. Then we init nfqueue and bind the queue number 0 to our callback function. We use the same queue for both incoming and outgoing packets.&lt;/p&gt;

&lt;p&gt;In our callback function, we get a raw packet. To manipulate it, we create a scapy IP layer with the packet's payload as an argument. We print it and finally we accept the packet. If we interrupt the process (with Ctrl+C) then we unbind the queue and flush the iptables rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; check your INPUT and OUTPUT chain rules before flushing it as it flushes everything.&lt;/p&gt;

&lt;p&gt;Let's see if it works.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ curl http://SERVER_IP &lt;span class="nt"&gt;--local-port&lt;/span&gt; 44444
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Script output
###[ IP ]### 
  version= 4
  ihl= 5
  tos= 0x0
  len= 60
  id= 60025
  flags= DF
  frag= 0
  ttl= 64
  proto= tcp
  chksum= 0xa981
  src= SERVER_IP
  dst= CLIENT_IP
  \options\
###[ TCP ]### 
     sport= 44444
     dport= http
     seq= 1190907934
     ack= 0
     dataofs= 10
     reserved= 0
     flags= S
     window= 64240
     chksum= 0xfaf1
     urgptr= 0
     options= [('MSS', 1460), ('SAckOK', b''), ('Timestamp', (2004053730, 0)), ('NOP', None), ('WScale', 7)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80 and host SERVER_IP"&lt;/span&gt;
    1 0.000000000 CLIENT_IP → SERVER_IP TCP 74 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64240 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2004025682 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great! Curl tries to initiate the session with the server using a SYN-flagged packet. When the packet reaches the &lt;code&gt;raw_pkt.accept()&lt;/code&gt; instruction, it is sent to the client and we can notice it in &lt;strong&gt;tshark&lt;/strong&gt;'s output.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Changing the flag
&lt;/h3&gt;

&lt;p&gt;In our callback function, let's try changing the packet's flag with 'F' and see what happens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Get a scapy object from raw packet
&lt;/span&gt;    &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_payload&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;                                                                  
    &lt;span class="c1"&gt;# Set S flag to F flag
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;haslayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;S&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="c1"&gt;# Update raw packet and then accept it
&lt;/span&gt;    &lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_payload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80 and host SERVER_IP"&lt;/span&gt;
    1 0.000000000 CLIENT_IP → SERVER_IP TCP 74 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64240 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2005103907 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    2 1.005513362 CLIENT_IP → SERVER_IP TCP 74 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8222720 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2005104912 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Something is wrong, we send a FIN but get no answer... Oh right! checksums, of course. Let's update checksums accordingly.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Update checksums
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Set S flag to F flag
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;haslayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;S&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="c1"&gt;# Update checksums
&lt;/span&gt;        &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;     
        &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;    
        &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I use the function &lt;code&gt;show2()&lt;/code&gt; that recalculate checksums if they are none. This is functional but loud as it also prints the packet. I didn't find any other solution that does it quietly.&lt;/p&gt;

&lt;p&gt;Let's try now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80 and host SERVER_IP"&lt;/span&gt;
    1 0.000000000 CLIENT_IP → SERVER_IP TCP 74 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64240 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2005448037 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    2 0.154677103 SERVER_IP → CLIENT_IP TCP 74 80 → 44444 &lt;span class="o"&gt;[&lt;/span&gt;RST, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64768 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1006897750 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2005448037 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yes! The server answers us back with a RST-ACK. But our curl client still doesn't understand what he means by that. Let's map all the flags accordingly now.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Map all the flags (final code)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/python3
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;netfilterqueue&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;NetfilterQueue&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;scapy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;S_ADDR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SERVER_IP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Update iptables rules to intercept incoming and outcoming packets from/to S_ADDR
&lt;/span&gt;&lt;span class="n"&gt;output_rule&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iptables -A OUTPUT --destination &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S_ADDR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -j NFQUEUE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;input_rule&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iptables -A INPUT --source &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;S_ADDR&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -j NFQUEUE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;flush_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iptables -F OUTPUT &amp;amp;&amp;amp; iptables -F INPUT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_rule&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_rule&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Dictionary with flag mapping
&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;S&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;E&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FS&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;# Append the inverted dictionnary
&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;

&lt;span class="c1"&gt;# Helper function to set the flags accordingly
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;set_flags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;

&lt;span class="c1"&gt;# Callback function that modifies our packets before sending them
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Get a scapy raw packet that we can modify
&lt;/span&gt;    &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_payload&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="c1"&gt;# Set flags accordingly
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;haslayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set_flags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="c1"&gt;# Calculate new chksums
&lt;/span&gt;        &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;
        &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;chksum&lt;/span&gt;
        &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="c1"&gt;# Update 
&lt;/span&gt;        &lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_payload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Now we tell nfqueue to accept the modified packet
&lt;/span&gt;    &lt;span class="n"&gt;raw_pkt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Init nfqueue
&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NetfilterQueue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unbind&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flush_rules&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We use a dictionary to map all the flags. And then we use the &lt;code&gt;Dict.update()&lt;/code&gt; method to add the same tuples but with the keys and values swaped. (e.g. &lt;code&gt;"S":"F"&lt;/code&gt; adds &lt;code&gt;"F":"S"&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Let's try our new code now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ curl http://SERVER_IP &lt;span class="nt"&gt;--local-port&lt;/span&gt; 44444
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;FreakyFlagday&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;It's freakyflagday and you've made it so far! Well done. All you've gotta do is download the text file from '/gimmedafile.txt' and it'll send you a big important file with the flag at the very end.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80 and host SERVER_IP"&lt;/span&gt;
    1 0.000000000 MY_IP → SERVER_IP TCP 74 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64240 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676225 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    2 0.145262609 SERVER_IP → MY_IP TCP 74 80 → 44444 &lt;span class="o"&gt;[&lt;/span&gt;RST, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64768 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145437 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676225 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    3 0.160854317 MY_IP → SERVER_IP TCP 66 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64256 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676385 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145437
    4 0.170014574 MY_IP → SERVER_IP HTTP 144 &lt;span class="o"&gt;[&lt;/span&gt;TCP Port numbers reused] GET / HTTP/1.1 
    5 0.287621647 SERVER_IP → MY_IP TCP 66 80 → 44444 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145607 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676385
    6 0.290354873 SERVER_IP → MY_IP HTTP 220 &lt;span class="o"&gt;[&lt;/span&gt;TCP Port numbers reused] HTTP/1.1 200 OK 
    7 0.311377282 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;78 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676535 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145609
    8 0.426628596 SERVER_IP → MY_IP TCP 376 &lt;span class="o"&gt;[&lt;/span&gt;TCP Port numbers reused] 80 → 44444 &lt;span class="o"&gt;[&lt;/span&gt;FIN, SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;310 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145748 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676535
    9 0.444996568 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;78 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676668 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145748
   10 0.449897000 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP ACKed unseen segment] &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;78 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;465 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676669 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145748
   11 0.562439239 SERVER_IP → MY_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 80 → 44444 &lt;span class="o"&gt;[&lt;/span&gt;FIN, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;310 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145885 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676669
   12 0.583268378 MY_IP → SERVER_IP TCP 66 44444 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;79 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784676807 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786145885
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seems like it worked pretty well. The flag seems to be in this &lt;code&gt;gimmedafile.txt&lt;/code&gt; file. Let's try and get the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ curl http://SERVER_IP/gimmedafile.txt &lt;span class="nt"&gt;--local-port&lt;/span&gt; 44445
Voluptatem ipsum &lt;span class="o"&gt;[&lt;/span&gt;...39404 characters...] dolor ut.

flag&lt;span class="o"&gt;{&lt;/span&gt;e2960da061a85fbcabb0670e4ddb9e93&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;❯ &lt;span class="nb"&gt;sudo &lt;/span&gt;tshark &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"tcp port 80 and host SERVER_IP"&lt;/span&gt;
    1 0.000000000 MY_IP → SERVER_IP TCP 74 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64240 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1460 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824675 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    2 0.142799620 SERVER_IP → MY_IP TCP 74 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;RST, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64768 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;MSS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1420 &lt;span class="nv"&gt;SACK_PERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786293873 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824675 &lt;span class="nv"&gt;WS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128
    3 0.159637964 MY_IP → SERVER_IP TCP 66 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;64256 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786293873
    4 0.165712720 MY_IP → SERVER_IP HTTP 159 &lt;span class="o"&gt;[&lt;/span&gt;TCP Port numbers reused] GET /gimmedafile.txt HTTP/1.1 
    5 0.278158205 SERVER_IP → MY_IP TCP 66 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294039 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
    6 0.281436371 SERVER_IP → MY_IP HTTP 227 &lt;span class="o"&gt;[&lt;/span&gt;TCP Port numbers reused] HTTP/1.1 200 OK 
    7 0.286101671 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;161 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294048 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
    8 0.290101742 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1569 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294052 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
    9 0.293428900 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2977 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294056 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
   10 0.300100620 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4385 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294060 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
   11 0.303058929 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5793 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294060 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
   12 0.305803295 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;7201 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294061 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
   13 0.308359956 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8609 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294061 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
   14 0.311371415 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10017 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294067 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
   15 0.314342631 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;11425 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294070 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824834
   16 0.317448713 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824974 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294043
   17 0.322497523 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824980 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294048
   18 0.345296346 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824986 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294052
   19 0.363030999 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824992 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294056
   20 0.374327694 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825009 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294060
   21 0.379388653 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825014 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294060
   22 0.384474051 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825020 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294061
   23 0.389563243 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825031 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294061
   24 0.395089952 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825038 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294067
   25 0.400325803 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825049 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294070
   26 0.429292547 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;12833 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294190 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824974
   27 0.432396491 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;14241 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294190 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824974
   28 0.435011224 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;15649 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294195 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824980
   29 0.437501469 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;17057 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294195 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824980
   30 0.455718674 SERVER_IP → MY_IP TCP 1276 &lt;span class="o"&gt;[&lt;/span&gt;TCP Port numbers reused] 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;FIN, SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1210 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294218 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824986
   31 0.459562289 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1210 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294222 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824986
   32 0.473141161 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825125 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294190
   33 0.473160024 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2618 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294235 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824992
   34 0.476471278 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4026 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294235 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784824992
   35 0.478176107 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825133 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294190
   36 0.483052912 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5434 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294246 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825009
   37 0.489734170 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825140 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294195
   38 0.490446940 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;6842 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294246 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825009
   39 0.495628297 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8250 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294252 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825014
   40 0.498457646 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9658 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294252 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825014
   41 0.502477260 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825148 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294195
   42 0.503250048 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;11066 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294256 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825020
   43 0.508097290 SERVER_IP → MY_IP TCP 1474 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;12474 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1408 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294261 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825031
   44 0.529693000 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825165 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294218
   45 0.547629433 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825177 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294222
   46 0.569959311 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825198 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294235
   47 0.574834351 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825216 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294246
   48 0.582698364 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825234 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294252
   49 0.590039492 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;497 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825245 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294256
   50 0.640226149 SERVER_IP → MY_IP TCP 651 &lt;span class="o"&gt;[&lt;/span&gt;TCP Port numbers reused] 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;FIN, SYN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;585 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294402 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825165
   51 0.663333652 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Keep-Alive] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825334 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294402
   52 0.669714648 MY_IP → SERVER_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP ACKed unseen segment] &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;FIN, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;93 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;32933 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825335 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294402
   53 0.776541498 SERVER_IP → MY_IP TCP 66 &lt;span class="o"&gt;[&lt;/span&gt;TCP Retransmission] 80 → 44445 &lt;span class="o"&gt;[&lt;/span&gt;FIN, ACK] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;585 &lt;span class="nv"&gt;Ack&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;506 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294541 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825335
   54 0.793113070 MY_IP → SERVER_IP TCP 66 44445 → 80 &lt;span class="o"&gt;[&lt;/span&gt;ECN] &lt;span class="nv"&gt;Seq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;94 &lt;span class="nv"&gt;Win&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;501 &lt;span class="nv"&gt;Len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;TSval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1784825466 &lt;span class="nv"&gt;TSecr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;786294541
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And voilà! Here's the second flag: &lt;code&gt;flag{e2960da061a85fbcabb0670e4ddb9e93}&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff99v43ptb9b94ybkjbh7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff99v43ptb9b94ybkjbh7.gif" alt="So excited" width="250" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope you enjoyed this introduction to packets manipulation. I would like to thank &lt;strong&gt;nneonneo&lt;/strong&gt; and &lt;strong&gt;Kkevsterrr&lt;/strong&gt; for their explanations. Join &lt;a href="https://discord.gg/ysndAm8" rel="noopener noreferrer"&gt;Nahamsec on Discord&lt;/a&gt; to reach them out.&lt;br&gt;
Until next time!&lt;/p&gt;

&lt;h3&gt;
  
  
  Further Lectures
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ttcplinux.sourceforge.net/documents/one/tcpstate/tcpstate.html#:~:text=Simultaneous%20Open,active%20open%20on%20both%20sides%22." rel="noopener noreferrer"&gt;TCP State Transitions - T/TCP (Transaction TCP) for Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://users.cs.northwestern.edu/~agupta/cs340/project2/TCPIP_State_Transition_Diagram.pdf" rel="noopener noreferrer"&gt;TCP/IP State Transition Diagram (RFC793)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc793" rel="noopener noreferrer"&gt;RFC-793 on ietf.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tcpipguide.com/index.htm" rel="noopener noreferrer"&gt;The TCP/IP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://byt3bl33d3r.github.io/using-nfqueue-with-python-the-right-way.html" rel="noopener noreferrer"&gt;Using nfqueue with python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scapy.readthedocs.io/" rel="noopener noreferrer"&gt;Scapy docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/5953371/how-to-calculate-a-packet-checksum-without-sending-it" rel="noopener noreferrer"&gt;About calculating checksums with Scapy on Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/oremanj/python-netfilterqueue" rel="noopener noreferrer"&gt;python-netfilterqueue on Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.netfilter.org/" rel="noopener noreferrer"&gt;Netfilter project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.keycdn.com/support/tcp-flags" rel="noopener noreferrer"&gt;TCP Flags on KeyCDN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ctf</category>
      <category>security</category>
      <category>networking</category>
      <category>hacking</category>
    </item>
  </channel>
</rss>
