Giriş
tcpdump aracı Wireshark veya tshark kadar gelişmiş değil. Ancak çoğu Linux'ta kurulu geldiği için öğrenmekte fayda var.
tcpdump aracı Wireshark veya tshark kadar gelişmiş değil. Ancak çoğu Linux'ta kurulu geldiği için öğrenmekte fayda var.
İsminden sadece tcp trafiğinin analiz edilebildiği sanılmasın, udp ve icmp trafiğini de gösterebiliyor. Hatta tcpdump ile "-e" seçeneği kullanılarak Layer 2 MAC adreslerini görmek bile mümkün.
tcpdump Alternatifleri
tcpdump Alternatifleri
1. Wireshark
2. tshark
3. iptables ile loglama
3. Raw Sockets ile loglama
4. PF_RING ile loglama
5. pcap ile loglama
ip6 seçeneği
Şöyle yaparız.
tcpdump -ni eth3 ip6 -s0
-c seçeneğiKaç tane paketi işledikten sonra durması gerektiğini belirtir.
Örnek
50 paketi yakalamak için şöyle yaparız.
Hedef ip ve port numarasını görmek için şöyle yaparız.
MAC zarfını da yakalar. Şöyle yaparız.
Açıklaması şöyle. IP adresini rakam olarak gösterir.
-p seçeneği
Açıklaması şöyle. Gösterilmesi istenen protocol belirtilir
tcpdump -s0 -i wlan0 -C 50 -w /path/to/ capture-$(date +%a-%d%m%y-%H%M-%S).pcap
dst seçeneğiHedef ip ve port numarasını görmek için şöyle yaparız.
tcpdump -i eth0 dst port 6005
-e seçeneğiMAC zarfını da yakalar. Şöyle yaparız.
tcpdump -e -i eth0
-ether seçeneği
Belli bir mac adresine göre filtreleme yapabilmeyi
Örnek
Şöyle yaparız
sudo tcpdump ether host aa:bb:cc:11:22:33
-i seçeneği - interface
Kullanılması istenilen arayüzü belirtir.
Örnek
eth0'daki paketleri yakalayıp dosyaya yazmak için şöyle yaparız. -s ile snaplen tanımlanır. 0 verilirse 65535 byte anlamına gelir.tcpdump -s0 -i eth0 -w eth0_traffic.pcap
-nAçıklaması şöyle. IP adresini rakam olarak gösterir.
-n Don’t convert host addresses to names. This can be used to avoid DNS lookups.
-nn Don’t convert protocol and port numbers etc. to names either.
Örnek
Şöyle yaparız
# tcpdump -nn 'icmp and (src a.b.0.1 or dst a.b.0.1)'
Açıklaması şöyle. Gösterilmesi istenen protocol belirtilir
Packet capture utilities can trivially put the network device into promiscuous mode, which is to say that the device accepts everything it receives. In fact, this is usually the default: with tcpdump, you have to specify the -p option in order to not do it.host seçeneği
Örnek
Şöyle yaparız
tcpdump -i lo -nnvvv host 192.168.1.100 and port 8000
port seçeneğiAğ arayüzü belirtmezsek default arayüz kullanır. Şöyle yaparız.
tcpdump port 80
Ağ arayüzü ile kullanmak için şöyle yaparız.tcpdump -i eth0 port 80udp seçeneği
Şöyle yaparız
tcpdump udp port 53
src seçeneğiSource alanı belirtilen IP olan paketleri yakalamak için şöyle yaparız.
tcpdump -n src host 192.168.1.m2 -w network.pcap
-t seçeneği
tcpdump çıktısından timestamp görmek istemiyorsak -t kullanırız.
Çıktının verbose olmasını sağlar.
-vv seçeneği
Çıktının daha da verbose olmasını sağlar. Şöyle yaparız.
Belirtilen dosyaya yazar.
-vv seçeneği
Çıktının daha da verbose olmasını sağlar. Şöyle yaparız.
tcpdump -nnvvXSs 1514 -i <interface> port 80 -w output.pcap.
-w seçeneği - writeBelirtilen dosyaya yazar.
Örnek
Şöyle yaparız
filtre Örnekleri
Önce Berkeley Packet Filter (BPF) açıklamasına bakalım.
tcpdump -i eth0 'port 443' -vvv -w network.cap
Örnek
Şöyle yaparız
$ tcpdump tcp ‘port 443 or port 80’ -w out-file
-X seçeneği
Gelen paketlerin sadece header alanını değil, içini de gösterir. Açıklaması şöyle
-X When parsing and printing, in addition to printing the headers of each packet, print the data of each packet (minus its link level header).
Önce Berkeley Packet Filter (BPF) açıklamasına bakalım.
What is BPF?
BPF (or more commonly, the extended version, eBPF) is a language that was originally used exclusively for filtering packets, but it is capable of quite a lot more. On Linux, it can be used for many other things, including system call filters for security, and performance monitoring, as you pointed out. While Windows did add eBPF support, that is not what Windows' perfmon utility uses. Windows only added support for compatibility with non-Windows utilities that rely on OS support for eBPF.
The eBPF programs are not executed in userspace. Instead, the application creates and sends an eBPF program to the kernel, which executes it. It is actually machine code for a virtual processor that is implemented in the form of an interpreter in the kernel, although it can also use JIT compilation to enhance performance considerably. The program has access to some basic interfaces in the kernel, including those related to performance and networking. The eBPF program then communicates with the kernel to provide it the computational results (such as dropping a packet).
BPF bazı kısıtlamalar ile geliyor. Açıklaması şöyle
Restrictions on eBPF programs
In order to protect from denial-of-service attacks or accidental crashes, the kernel first verifies the code before it is compiled. Before being run, the code is subject to several important checks:The upshot is that the verifier must be able to prove that the eBPF program halts. It hasn't found a solution to the halting problem, of course, which is why it only accepts programs that it knows will halt. To do this, it represents the program as a directed acyclic graph. In addition to this, it tries to prevent information leaks and out-of-bounds memory access. The verifier thus further ensures:
- The program consists of no more than 4096 instructions in total.
- Backwards jumps cannot occur, with the exception of bounded loops.
- There are no instructions that are always unreachable.
Pointers cannot be stored or returned as a value, so the eBPF program is "blind" to them.
- Pointer comparison cannot be performed.
- Pointer arithmetic can only be done with a scalar (a value not derived from a pointer).
- No pointer arithmetic results in a pointer outside of its designated memory space.
The verifier is rather complex and does far more, although it has itself been the source of serious security bugs, at least when the bpf(2) syscall is not disabled for unprivileged users.
BPF kodunu görmek için -d seçeneği kullanılır. Şöyle yaparız
# tcpdump -i eth0 "dst host 192.168.1.0" -d
(000) ldh [12]
(001) jeq #0x800 jt 2 jf 4
(002) ld [30]
(003) jeq #0xc0a80100 jt 8 jf 9
(004) jeq #0x806 jt 6 jf 5
(005) jeq #0x8035 jt 6 jf 9
(006) ld [38]
(007) jeq #0xc0a80100 jt 8 jf 9
(008) ret #262144
(009) ret #0
Örnek
Hiç yorum yok:
Yorum Gönder