GNU/Linux >> Linux Esercitazione >  >> Linux

scarica le connessioni tcp senza tcpdump

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.


Linux
  1. Effetto di SO_SNDBUF

  2. Tomcat si avvia senza errori ma non è in ascolto su 8080

  3. Ansible:sudo senza password

  4. Rimuovi il file senza chiedere

  5. Installare emacs senza sudo?

Comando Tcpdump in Linux

comando Linux tcpdump

Cattura i pacchetti con tcpdump

Limita il numero massimo di connessioni TCP ai server Web

cp -r senza file nascosti

Perché sono necessari < o > per usare /dev/tcp