2017-11-06 1 views
-1

링크 및 노드 오류에서의 신뢰성을 검사하기 위해 TCP 프로토콜을 테스트 중이며, ACK가 클라이언트로 손실되면 ACK 응답이 매우 빠르다는 것을 테스트하고 싶습니다. 이더넷 케이블을 꺼내십시오. ACK를 지연시킬 방법이 있습니까? 아니면 다른 목적을 달성 할 수있는 방법이 있습니까?클라이언트 측에서 서버 쪽에서 TCP ACK를 지연시킬 수 있습니까?

+0

응용 프로그램을 테스트하십시오. 플랫폼을 테스트하지 마십시오. 그걸 테스트 해 봤어. 시간을 낭비하지 마십시오. 플랫폼 버그를 발견하면 정확히 그것에 대해 무엇을 할 것입니까? – EJP

답변

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가 인정 될 것입니다. –

관련 문제