2017-06-15 3 views
0

Zu Testzwecken muss ich POST-Anfragen an Google Cloud HTTP Load Balancer von Postman senden, wenn Google Developer Tools aktiviert ist (Netzwerkaktivitäten verfolgen).tcpkill: Schließen Sie die Verbindungen erst ab, nachdem sie eingerichtet wurden

Jede Anfrage sollte mit einer anderen Verbindung erfolgen.

Also, nehme ich an tcpkill Dienstprogramm zu verwenden:

$ tcpkill -9 "dst XXX.XXX.XXX.XXX and dst port 443"

Aber schließlich führt dies jede Verbindung zu schließen, bevor festgestellt werden würde. Postman bekommt also einen Verbindungsfehler.

Die Frage ist also: Wie beendet man die Verbindung erst, nachdem sie eingerichtet wurde und eine POST-Anfrage an den Server gesendet wurde?

Vielen Dank im Voraus, Kameraden.

+0

Warum möchten Sie die Verbindungen beenden? Wenn Sie das wirklich tun wollen, dann können Sie Verbindungen in ESTABLISHED oder einem anderen späteren Zustand mit netstat, lsof, ss usw. zuerst prüfen und dann nur diejenigen beenden. –

+0

@LucianoAfranllie Die Sache ist, dass ich tcpkill einfach im Terminal laufen lassen möchte, um sofort Verbindungen zu beenden, aber wenn ich nach tcpkill eine Anfrage mache, wird die Verbindung den Server überhaupt nicht erreichen. –

Antwort

2

Sie können dies nicht mit tcpkill tun, da dieses Programm Datenverkehr benötigt, um die Verbindung zu beenden, und Filter, die den Verbindungsstatus verwenden, nicht unterstützt. Wenn Sie also tcpkill ausführen, bevor die Verbindungen hergestellt sind, werden sie vor der Verbindung beendet. und wenn Sie tcpkill ausführen, nachdem Verbindungen hergestellt wurden, werden sie nicht gelöscht, wenn kein Verkehr vorhanden ist, da tcpkill eine gültige Sequenznummer benötigt, um eine RST zu senden.

Sie können versuchen, killcx Filterung aufgebauten Verbindungen mit ss oder netstat, etwa so:

#!/bin/bash 

dst=$1 
port=$2 

peer_addrs=$(ss -t state established dst ${dst} dport = :${port} | 
tail -n +2 | awk '{print $4}' | cut -d : -f 1) 
for addr in ${peer_addrs}; do 
    echo "killing ${addr}:${port}" 
    killcx ${addr}:${port}" & 
    sleep 2 
    killall -9 killcx 
done 

Sie müssen dieses Skript regelmäßig in einer Schleife mit Uhr oder ähnlichem und laufen, natürlich, das won‘ t Verbindungen sofort nach dem Verbindungsaufbau zu beenden, aber ein wenig später, wenn der Zyklus die Verbindung findet.

+0

tcpkill unterstützt TCP-Flags wie tcpdump do: 'tcpkill 'tcp [tcpflags] & (tcp-syn | tcp-ack)! = 0" '. Vielleicht könnte ich etwas wie das verwenden, um das Töten von Verbindungen zu verhindern, das sich gerade etablieren würde. Außerdem würde tcpkill das so genannte "kill" für die hergestellte Verbindung ausführen, da es RST-Flag an es sendet (AFAIK). –

+0

Mit tcpdump-Ausdrücken können Sie am besten nach einem SYN/ACK-Paket suchen, aber nicht nach dem letzten ACK, der die Verbindung tatsächlich herstellt, da es sich nicht von anderen ACK unterscheidet. In Bezug auf Ihren letzten Kommentar kann tcpkill die bestehenden Verbindungen erst beenden, nachdem der Verkehr auf dieser Verbindung erkannt wurde, und der Traffic benötigt wird, um eine gültige Sequenznummer für die RST zu erhalten. –

+0

Ich denke, ich würde ein Skript mit expect schreiben, das auf eine Zeichenkette in der Ausgabe des Befehls netstat mit dem Status ESTABLISHED wartet und diese Verbindung nur durch den src-Port beenden würde. LGTM. –

Verwandte Themen