Solución 1:
Realmente intentaría obtener tcpdump. Dicho esto, algunas alternativas para ver si existe una determinada conexión para una IP son:
straza:
[[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
Solución 2:
Seguro que tienes 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)
Esto terminará con "GOT TARGET" siempre que la dirección IP que regresa coincida. Dado que TCP tiene que devolver algo durante un apretón de manos, esto debería capturar cualquier cosa de una dirección de destino específica. Sin embargo, no importa si el protocolo es TCP o UDP (ni lo verifico).
No olvides cambiar OBJETIVO e INTERFAZ.
Solución 3:
Iptables tiene una capacidad de depuración y eso también se puede usar para el análisis de tráfico.
La solución se describe en la siguiente URL.
Reglas de depuración en Iptables
También vale la pena leer la siguiente URL para configurar el registro de la salida de seguimiento en un archivo de su elección.
http://backreference.org/2010/06/11/iptables-depuración/
No consideraría esta solución igual a tcpdump, pero se puede hacer usando una instalación mínima de Centos. Debe tener cuidado de no llenar el disco con los registros, porque tcpdump es mucho más eficiente en el uso del disco. Desactive el registro cuando no sea necesario.
Puede usar lo siguiente como plantilla básica en su secuencia de comandos.
# 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)
Solución 4:
Si necesita un software específico para hacer su trabajo y no se le permite hacerlo, no está presentando un buen caso de negocios. o vender sus ideas a las personas adecuadas... o no tienes el control de este sistema...
Si tuviera la tarea de hacer algo y necesitara el tipo de información de depuración/solución de problemas que necesita en este caso, usaría la herramienta adecuada. Eso es probablemente tcpdump
o tshark
. Sí, esas son piezas de software, pero las consideraría más utilidades esenciales . De hecho, son utilidades que podrían instalarse o cargarse en el sistema temporalmente y eliminarse sin incidentes (¿los medios extraíbles son una opción?...sugerencia )
Pero el punto es que una solución alternativa a la política de la empresa probablemente requiera más esfuerzo que obtener la aprobación para este caso de uso.
Solución 5:
Kyle ofreció algunas excelentes opciones. Uno más sería usar 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
Esto es esencialmente una regla de contabilidad. No permite ni deniega explícitamente el tráfico, por lo que se usa la política predeterminada para la cadena de SALIDA (que por defecto es ACEPTAR). Sin embargo, cualquier paquete coincidente incrementará los contadores de la regla.
Opcionalmente, también puede registrar detalles sobre el paquete con el -j LOG
opción:
[[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 ...
Los registros irán a la función de registro del kernel, por lo que debería aparecer en /var/log/messages en los derivados de Red Hat y /var/log/kern.log en los derivados de Debian. También sería visible en la salida de dmesg
, como se muestra. A diferencia de tcpdump
, sin embargo, no registrará el contenido completo del paquete, solo el contenido del encabezado del paquete.