Solution 1 :
J'essaierais vraiment d'obtenir tcpdump. Cela étant dit, certaines alternatives pour voir si une certaine connexion existe pour une adresse IP sont :
tracé :
[[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
Solution 2 :
Vous avez sûrement 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)
Cela sortira avec "GOT TARGET" fournissant l'adresse IP qui revient correspond. Étant donné que TCP doit renvoyer quelque chose lors d'une poignée de main, cela devrait intercepter tout ce qui provient d'une adresse cible spécifique. Peu importe si le protocole est TCP ou UDP (je ne vérifie pas non plus).
N'oubliez pas de modifier TARGET et INTERFACE.
Solution 3 :
Iptables a une capacité de débogage et peut également être utilisée pour l'analyse du trafic.
La solution est décrite sur l'URL ci-dessous.
Règles de débogage dans Iptables
Il vaut également la peine de lire l'URL suivante pour configurer la journalisation de la sortie de trace dans un fichier de votre choix.
http://backreference.org/2010/06/11/iptables-debugging/
Je ne considérerais pas cette solution comme égale à tcpdump, mais cela peut être fait en utilisant une installation minimale de Centos. Vous devez faire attention à ne pas remplir le disque avec les journaux, car tcpdump est beaucoup plus efficace dans l'utilisation du disque. Désactivez la journalisation lorsqu'elle n'est pas nécessaire.
Vous pouvez utiliser ce qui suit comme modèle de base dans votre 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)
Solution 4 :
Si vous avez besoin d'un logiciel spécifique pour faire votre travail, et que vous n'y êtes pas autorisé, soit vous ne faites pas une bonne analyse de rentabilisation ou vendre vos idées aux bonnes personnes... ou vous ne contrôlez pas ce système...
Si j'étais chargé de faire quelque chose et que j'avais besoin du type d'informations de débogage/dépannage dont vous avez besoin dans ce cas, j'utiliserais le bon outil. C'est probablement tcpdump
ou tshark
. Oui, ce sont des logiciels, mais je les considérerais plutôt comme des utilitaires essentiels . En fait, ce sont des utilitaires qui peuvent être installés ou chargés temporairement sur le système et supprimés sans incident (un support amovible est-il une option ?...indice )
Mais le fait est qu'une solution de contournement à la politique de l'entreprise nécessite probablement plus d'efforts que d'obtenir l'approbation pour ce cas d'utilisation.
Solution 5 :
Kyle a proposé d'excellentes options. Un autre serait d'utiliser 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
Il s'agit essentiellement d'une règle comptable. Il n'autorise ni ne refuse explicitement le trafic, donc la stratégie par défaut pour la chaîne OUTPUT est utilisée (qui est par défaut ACCEPT). Cependant, tout paquet correspondant incrémentera les compteurs de la règle.
Vous pouvez également enregistrer les détails du paquet avec le -j LOG
choix :
[[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 ...
Les journaux iront à la fonction de journalisation du noyau, il devrait donc apparaître dans /var/log/messages sur les dérivés de Red Hat et /var/log/kern.log sur les dérivés de Debian. Il serait également visible dans la sortie de dmesg
, comme montré. Contrairement à tcpdump
, cependant, il n'enregistrera pas le contenu complet du paquet, uniquement le contenu de l'en-tête du paquet.