링크 및 노드 오류에서의 신뢰성을 검사하기 위해 TCP 프로토콜을 테스트 중이며, ACK가 클라이언트로 손실되면 ACK 응답이 매우 빠르다는 것을 테스트하고 싶습니다. 이더넷 케이블을 꺼내십시오. ACK를 지연시킬 방법이 있습니까? 아니면 다른 목적을 달성 할 수있는 방법이 있습니까?클라이언트 측에서 서버 쪽에서 TCP ACK를 지연시킬 수 있습니까?
-1
A
답변
0
ACK를 지연 시키도록 커널에 알릴 방법이 없습니다. ACK가 손실되고 연결이 양쪽 측면에서 멈춘 것처럼 보일 경우 많은 재 시도가있을 수 있습니다.
TCP/IP를 테스트하기로 결정한 경우 Scapy와 같은 도구를 사용하여 간단한 TCP/IP 스택 구현을 빌드하면 요청한 작업을 수행 할 수 있습니다. 그렇게 할 경우 RST 패킷 전송을 방지하기 위해 호스트 기반 방화벽을 구성해야합니다. 다음은 모든 포트에 대한 SYN에 대한 응답으로 세 방향 핸드 셰이크를 완료하는 간단한 예입니다.
#!/usr/bin/python
from scapy.all import *
# My starting sequence number
sequence=100
# Wait for an inbound syn
packets=sniff(filter="tcp[13]&0x02 != 0", count=1, iface="eth0")
syn = packets[0]
my_ack = syn.getlayer("TCP").seq + 1
dest = syn.getlayer("IP").src
sport = syn.getlayer("TCP").dport
dport = syn.getlayer("TCP").sport
target = IP(dst=dest)
tcp_layer = TCP(sport=sport, dport=dport, ack=my_ack, seq=sequence, flags="SA")
response = sr1(target/tcp_layer)
synack = response[0]
target = IP(dst=dest)
tcp_layer=TCP(sport=sport, dport=dport, ack=my_ack, seq=sequence, flags="A")
send(target/tcp_layer)
+0
매우 유용합니다. –
+0
그럴 경우 upvote가 인정 될 것입니다. –
응용 프로그램을 테스트하십시오. 플랫폼을 테스트하지 마십시오. 그걸 테스트 해 봤어. 시간을 낭비하지 마십시오. 플랫폼 버그를 발견하면 정확히 그것에 대해 무엇을 할 것입니까? – EJP