GNU/Linux >> Znalost Linux >  >> Linux

výpis tcp připojení bez tcpdump

Řešení 1:

Opravdu bych zkusil získat tcpdump. Jak již bylo řečeno, některé alternativy, jak zjistit, zda pro IP existuje určité připojení, jsou:

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

Řešení 2:

Určitě máte 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)

Toto se ukončí s "GOT TARGET" za předpokladu, že se IP adresa shoduje. Protože TCP musí během handshake něco poslat zpět, mělo by to zachytit cokoli z konkrétní cílové adresy. Nezáleží na tom, zda je protokol TCP nebo UDP (ani to nekontroluji).

Nezapomeňte změnit TARGET a INTERFACE.

Řešení 3:

Iptables má schopnost ladění a lze ji také použít pro analýzu provozu.

Řešení je popsáno na níže uvedené adrese URL.

Pravidla ladění v Iptables

Také stojí za to si přečíst následující URL, abyste mohli nastavit protokolování výstupu trasování do souboru podle vašeho výběru.

http://backreference.org/2010/06/11/iptables-debugging/

Nepovažoval bych toto řešení za rovné tcpdump, ale lze jej provést pomocí minimální instalace Centos. Musíte být opatrní, abyste nezaplnili disk protokoly, protože tcpdump je mnohem efektivnější při použití disku. Vypněte protokolování, když není vyžadováno.

Následující můžete použít jako základní šablonu ve svém skriptu.

# 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)

Řešení 4:

Pokud ke své práci potřebujete specifický software a není vám to dovoleno, buď nevytváříte dobrý obchodní případ nebo prodávat své nápady správným lidem... nebo nemáte kontrolu nad tímto systémem...

Kdybych měl za úkol něco udělat a potřeboval bych typ informací o ladění/odstraňování problémů, který v tomto případě požadujete, použil bych správný nástroj. To je pravděpodobně tcpdump nebo tshark . Ano, to jsou kusy softwaru, ale považoval bych je za základnější nástroje . Ve skutečnosti se jedná o nástroje, které lze dočasně nainstalovat nebo načíst do systému a odebrat bez problémů (je vyměnitelná média možností?...nápověda )

Jde ale o to, že vynalézavé řešení firemních zásad bude pravděpodobně vyžadovat více úsilí než získání schválení pro tento případ použití.

Řešení 5:

Kyle nabídl několik skvělých možností. Ještě jednou by bylo použít 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

Toto je v podstatě účetní pravidlo. Explicitně nepovoluje ani nezakazuje provoz, takže se použije výchozí zásada pro řetězec OUTPUT (ve výchozím nastavení ACCEPT). Každý odpovídající paket však zvýší čítače pro pravidlo.

Volitelně můžete také protokolovat podrobnosti o paketu pomocí -j LOG možnost:

[[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 ...

Protokoly půjdou do zařízení pro protokolování jádra, takže by se měly objevit v /var/log/messages u derivátů Red Hat a /var/log/kern.log u derivátů Debianu. Bylo by to vidět i ve výstupu dmesg , jak je znázorněno. Na rozdíl od tcpdump nezaprotokoluje však celý obsah paketu, pouze obsah hlavičky paketu.


Linux
  1. 6 pokročilých možností formátování tcpdump

  2. Vložit soubory bez oddělovače?

  3. Zachyťte pakety pomocí tcpdump

  1. Omezte maximální počet připojení TCP na webové servery

  2. cp -r bez skrytých souborů

  3. Ansible:sudo bez hesla

  1. Účinek SO_SNDBUF

  2. Bash:ls * bez seskupování složek

  3. Jak vyřadit provoz z USB?