I have a small program that sends several TCP packets to a server.
client-portA -- > server-portB
client-portA -- > server-portC
client-portA -- > server-portD
client-portA -- > server-portE
Packets are sent through libnet, in a loop.
client-portA ----SYN----- > server-portB (via Code)
client-portA ----SYN----- > server-portC (via Code)
client-portA ----SYN----- > server-portD (via Code)
client-portA ----SYN----- > server-portE (via Code)
If I run the program in windows XP, it works fine, I receive SYN/ACK for each packet.
After receiving the SYN/ACK, the kernel(?, Im not sure what, but not my code) sends a RST for every SYN/ACK received.
client-portA < ----SYN/ACK----- server-portB
client-portA ------RST------- > server-portB (not by my Code)
client-portA < ----SYN/ACK----- server-portC
client-portA ------RST------- > server-portC (not by my Code)
client-portA < ----SYN/ACK----- server-portD
client-portA ------RST------- > server-portD (not by my Code)
client-portA < ----SYN/ACK----- server-portE
client-portA ------RST------- > server-portE (not by my Code)
However, if I run the program in windows7(or window2012 or windows2008 or windows8), SYN/ACK is only received for the first port, portB.
And no RST is sent from the client side. Also, the SYN/ACK is received repeatedly.
client-portA ----SYN----- > server-portB (via Code)
client-portA ----SYN----- > server-portC (via Code)
client-portA ----SYN----- > server-portD (via Code)
client-portA ----SYN----- > server-portE (via Code)
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
I already tried sending RST after receiving SYN/ACK to replicate what happened in XP but still no SYN/ACK is received for ports C to E.
Also, after sending RST for portB, the server continues to send SYN/ACK from portB.
client-portA ----SYN----- > server-portB (via Code)
client-portA ----SYN----- > server-portC (via Code)
client-portA ----SYN----- > server-portD (via Code)
client-portA ----SYN----- > server-portE (via Code)
client-portA < ----SYN/ACK----- server-portB
client-portA ------RST------- > server-portB (this time via Code)
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
Instead of sending RST, I also tried sending ACK, RST/ACK or FIN/ACK but nothing worked.
Can anyone help me with this please?
I need to make my program work for all windows platform.
What I want is to receive SYN/ACK for each port(B to E).
Are there any differences in these windows platforms that can affect this TCP behavior?
client-portA -- > server-portB
client-portA -- > server-portC
client-portA -- > server-portD
client-portA -- > server-portE
Packets are sent through libnet, in a loop.
client-portA ----SYN----- > server-portB (via Code)
client-portA ----SYN----- > server-portC (via Code)
client-portA ----SYN----- > server-portD (via Code)
client-portA ----SYN----- > server-portE (via Code)
If I run the program in windows XP, it works fine, I receive SYN/ACK for each packet.
After receiving the SYN/ACK, the kernel(?, Im not sure what, but not my code) sends a RST for every SYN/ACK received.
client-portA < ----SYN/ACK----- server-portB
client-portA ------RST------- > server-portB (not by my Code)
client-portA < ----SYN/ACK----- server-portC
client-portA ------RST------- > server-portC (not by my Code)
client-portA < ----SYN/ACK----- server-portD
client-portA ------RST------- > server-portD (not by my Code)
client-portA < ----SYN/ACK----- server-portE
client-portA ------RST------- > server-portE (not by my Code)
However, if I run the program in windows7(or window2012 or windows2008 or windows8), SYN/ACK is only received for the first port, portB.
And no RST is sent from the client side. Also, the SYN/ACK is received repeatedly.
client-portA ----SYN----- > server-portB (via Code)
client-portA ----SYN----- > server-portC (via Code)
client-portA ----SYN----- > server-portD (via Code)
client-portA ----SYN----- > server-portE (via Code)
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
I already tried sending RST after receiving SYN/ACK to replicate what happened in XP but still no SYN/ACK is received for ports C to E.
Also, after sending RST for portB, the server continues to send SYN/ACK from portB.
client-portA ----SYN----- > server-portB (via Code)
client-portA ----SYN----- > server-portC (via Code)
client-portA ----SYN----- > server-portD (via Code)
client-portA ----SYN----- > server-portE (via Code)
client-portA < ----SYN/ACK----- server-portB
client-portA ------RST------- > server-portB (this time via Code)
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
client-portA < ----SYN/ACK----- server-portB
Instead of sending RST, I also tried sending ACK, RST/ACK or FIN/ACK but nothing worked.
Can anyone help me with this please?
I need to make my program work for all windows platform.
What I want is to receive SYN/ACK for each port(B to E).
Are there any differences in these windows platforms that can affect this TCP behavior?