Soluzione 1:
Proverei davvero a ottenere tcpdump. Detto questo, alcune alternative per vedere se esiste una certa connessione per un IP sono:
strace:
[[email protected]: ~] strace -e trace=network nc 1.2.3.4 1234
...
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(1234), sin_addr=inet_addr("1.2.3.4")}, 16) = -1 EINPROGRESS (Operation now in progress)
lsof:
[[email protected]: ~] nc 1.2.3.4 1234 &
[1] 11434
[[email protected]: ~] lsof -p 11434
....
nc 11434 kbrandt 3u IPv4 4543149 0t0 TCP 10.7.0.78:58886->1.2.3.4:search-agent (SYN_SENT)
netstat:
[[email protected]: ~] nc 1.2.3.4 1234 &
[1] 11486
[[email protected]: ~] sudo netstat -a -p | grep 11486
tcp 0 1 10.7.0.78:58891 1.2.3.4:search-agent SYN_SENT 11486/nc
Soluzione 2:
Sicuramente hai python
?
from socket import *
from struct import unpack
import sys
INTERFACE = "eth0"
TARGET = "8.8.8.8"
if __name__ == "__main__":
sock = socket(AF_PACKET, SOCK_DGRAM, 0x0800)
sock.bind((INTERFACE, 0x0800))
while True:
data = sock.recvfrom(1500, 0)[0]
ip = inet_ntop(AF_INET, data[12:16])
if ip == TARGET:
print "GOT TARGET"
sys.exit(1)
Questo uscirà con "GOT TARGET" fornendo l'indirizzo IP che restituisce le corrispondenze. Poiché TCP deve restituire qualcosa durante una stretta di mano, questo dovrebbe catturare qualsiasi cosa da uno specifico indirizzo di destinazione. Non importa se il protocollo è TCP o UDP (né controllo).
Non dimenticare di cambiare TARGET e INTERFACCIA.
Soluzione 3:
Iptables ha una funzionalità di debug che può essere utilizzata anche per l'analisi del traffico.
La soluzione è descritta nell'URL seguente.
Regole di debug in Iptables
Vale anche la pena leggere il seguente URL per configurare la registrazione dell'output di traccia in un file di tua scelta.
http://backreference.org/2010/06/11/iptables-debugging/
Non considererei questa soluzione uguale a tcpdump, ma può essere eseguita utilizzando un'installazione minima di Centos. Devi stare attento a non riempire il disco con i log, perché tcpdump è molto più efficiente nell'uso del disco. Disattiva la registrazione quando non è richiesta.
Puoi utilizzare quanto segue come modello di base nel tuo script.
# Logging
log(){
SOURCE=a.b.c.d (IP address)
$IPT -A INPUT -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "In: "
$IPT -A OUTPUT -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Out: "
$IPT -A FORWARD -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Fw: "
$IPT -t nat -A POSTROUTING -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Nat: "
}
#log (remove comment to enable)
trace(){
iptables -t raw -A PREROUTING -p tcp -j TRACE
iptables -t raw -A OUTPUT -p tcp -j TRACE
}
#trace (remove comment to enable)
Soluzione 4:
Se hai bisogno di un software specifico per svolgere il tuo lavoro e non sei autorizzato a farlo, o non stai creando un buon caso commerciale o vendere le tue idee alle persone giuste... oppure non hai il controllo di questo sistema...
Se avessi il compito di fare qualcosa e avessi bisogno del tipo di informazioni di debug/risoluzione dei problemi di cui hai bisogno in questo caso, userei lo strumento giusto. Probabilmente è tcpdump
o tshark
. Sì, quelli sono pezzi di software, ma li considererei più utilità essenziali . In realtà, sono utilità che possono essere installate o caricate temporaneamente nel sistema e rimosse senza problemi (il supporto rimovibile è un'opzione?...suggerimento )
Ma il punto è che una soluzione stravagante alla politica aziendale richiede probabilmente più impegno che ottenere l'approvazione per questo caso d'uso.
Soluzione 5:
Kyle ha offerto alcune ottime opzioni. Un altro sarebbe usare iptables
:
[[email protected] ~]$ sudo iptables -I OUTPUT -d 1.2.3.4/32
...
[[email protected] ~]$ sudo iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 105 packets, 35602 bytes)
pkts bytes target prot opt in out source destination
87 33484 LOG all -- * * 0.0.0.0/0 1.2.3.4 LOG flags 0 level 4
Questa è essenzialmente una regola contabile. Non consente o nega esplicitamente il traffico, pertanto viene utilizzata la politica predefinita per la catena OUTPUT (che per impostazione predefinita è ACCEPT). Tuttavia, qualsiasi pacchetto corrispondente incrementerà i contatori per la regola.
Puoi facoltativamente registrare anche i dettagli sul pacchetto con -j LOG
opzione:
[[email protected] ~]$ sudo iptables -I OUTPUT -d 1.2.3.4/32 -j LOG
...
[[email protected] ~]@ dmesg | grep 1.2.3.4 | tail -1
IN= OUT=eth0 SRC=192.168.1.1 DST=1.2.3.4 LEN=100 TOS=0x10 PREC=0x00 TTL=64 ...
I log andranno alla funzione di registrazione del kernel, quindi dovrebbero essere visualizzati in /var/log/messages sui derivati Red Hat e /var/log/kern.log sui derivati Debian. Sarebbe anche visibile nell'output di dmesg
, come mostrato. A differenza di tcpdump
, tuttavia, non registrerà il contenuto completo del pacchetto, ma solo il contenuto dell'intestazione del pacchetto.