Thank you for reading this post, don't forget to subscribe!
Данный скрипт собирает TCP/UDP дамп на сервере записывая в соответствующие файлы IP адреса и их порты.
необходимо указать только сетевой интерфейс, ip адрес и время в минутах, Далее в директории в которой запускался скрипт будет создана папка result в которой будет 2 подпапки для исходящих и входящих соединений:
result/VHOD
result/ISHOD
В данных папках будут создаваться файлы с именем IP адреса внутри которых будут отсортированные порты.
Скрипт собирает дамп в течении 1 минуты после чего производит обработку данных, после чего удаляет собранные дампы, оставляя результаты, далее по циклу он опять запускается и так до тех пор, пока не отработает указанный промежуток времени в минутах.
[codesyntax lang="bash"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
#!/bin/bash setevojinterface=ens192 Vremya_v_MINUTAX='300' ip='192.168.1.170' p=`pwd` if ! [ -d $p/result ]; then mkdir -p $p/result fi if ! [ -d $p/result/VHOD ]; then mkdir -p $p/result/VHOD fi if ! [ -d $p/result/ISHOD ]; then mkdir -p $p/result/ISHOD fi tcpdump=`rpm -qa | grep tcpdump | awk -F '-' '{print $1}' | head -1` if [[ $tcpdump != tcpdump ]]; then yum install -y tcpdump fi minuta=60 for (( j=1; j <= $Vremya_v_MINUTAX; j++ )) do echo "_____________________" echo "Пошла $j минута дампа, из $Vremya_v_MINUTAX минут" echo "" # Снимаем параллельно 2 дампа на входящие и исходящие соединения к нашему IP адресу timeout $minuta tcpdump -v -tt -nn -i $setevojinterface dst host $ip -w $p/result/dump.VHOD and not arp and not rarp and not vrrp and not host 228.0.0.18 & timeout $minuta tcpdump -v -tt -nn -i $setevojinterface src host $ip -w $p/result/dump.ISHOD and not arp and not rarp and not vrrp and not host 228.0.0.18 & timeout $minuta tcpdump -tt -nn -i $setevojinterface dst host $ip -w $p/result/dump.VHOD_UDP and not arp and not rarp and not vrrp and not host 228.0.0.18 & timeout $minuta tcpdump -tt -nn -i $setevojinterface src host $ip -w $p/result/dump.ISHOD_UDP and not arp and not rarp and not vrrp and not host 228.0.0.18 # начинаем обработку входящий соединений для снятого дампа tcpdump -v -tt -nn -r $p/result/dump.VHOD |awk -F '>' '{print $1, $2}' | awk '{print $1, $2}' | grep -viE 'IP|ARP' | grep -vi [a-z]| awk -F ":" '{print $1}' | awk -F '.' '{print $1"."$2"."$3"."$4" ",$5"."$6"."$7"."$8,"" $9}' | awk '{print $1,$3,$4}' |sort| uniq > $p/result/vhod.obsh #записываем в переменную уникальные входящие IP адреса uniq_ip_vhod=`cat $p/result/vhod.obsh |grep '[0-9]'| awk '{print $1}'| sort |uniq` #Данный цикл записывает порты (входящие) в файлы с именами IP адресов с которых идут входящие соединения for i in `echo $uniq_ip_vhod`; do grep $i $p/result/vhod.obsh | awk '{print $3}' >> $p/result/VHOD/$i; done #Данный цикл сортирует по возрастанию порты и удаляет совпадающие for i in `echo $uniq_ip_vhod`; do cat $p/result/VHOD/$i | sort -n |uniq > $p/result/VHOD/MV_$i && mv $p/result/VHOD/MV_$i $p/result/VHOD/$i; done ################################################################################ # начинаем обработку исходящих соединений для снятого дампа tcpdump -v -tt -nn -r $p/result/dump.ISHOD |awk -F '>' '{print $1, $2}' | awk '{print $1, $2}' | grep -viE 'IP|ARP' | grep -vi [a-z] |awk -F ":" '{print $1}' | awk -F '.' '{print $1"."$2"."$3"."$4" ",$5"."$6"."$7"."$8,"" $9}' | awk '{print $1,$3,$4}' |sort| uniq > $p/result/ishod.obsh #записываем в переменную уникальные исходящие IP адреса uniq_ip_ishod=`cat $p/result/vhod.obsh |grep '[0-9]'| awk '{print $1}'| sort |uniq` #Данный цикл записывает порты (исходящие) в файлы с именами IP адресов с которых идут исходящие соединения for i in `echo $uniq_ip_ishod`; do grep $i $p/result/ishod.obsh | awk '{print $3}'>> $p/result/ISHOD/$i; done #Данный цикл сортирует по возрастанию порты и удаляет совпадающие for i in `echo $uniq_ip_ishod`; do cat $p/result/ISHOD/$i | sort -n |uniq > $p/result/ISHOD/MV_$i && mv $p/result/ISHOD/MV_$i $p/result/ISHOD/$i; done # данные 2 цикла удаляют возможный мусор оставляя только файлы с именами IP адресов for k in `ls $p/result/VHOD/ | grep -v '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`; do rm -rf $p/result/VHOD/$k 2>/dev/null ;done for k in `ls $p/result/ISHOD/ | grep -v '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`; do rm -rf $p/result/ISHOD/$k 2>/dev/null ;done tcpdump -tt -nn -r $p/result/dump.VHOD_UDP |grep IP | grep UDP | awk '{print $3,$5}' | awk -F ":" '{print $1}' |awk '{print $1}' >> $p/result/UDP_VHOD tcpdump -tt -nn -r $p/result/dump.ISHOD_UDP |grep IP | grep UDP | awk '{print $3,$5}' | awk -F ":" '{print $1}' |awk '{print $1}' >> $p/result/UDP_ISHOD if [[ -s $p/result/UDP_VHOD ]] then cat $p/result/UDP_VHOD | sort -n | uniq > $p/result/mv_UDP_VHOD mv $p/result/mv_UDP_VHOD $p/result/UDP_VHOD echo "есть входящие UDP пакеты" else rm -rf $p/result/UDP_VHOD fi if [[ -s $p/result/ISHOD_UDP ]] then cat $p/result/UDP_ISHOD | sort -n | uniq > $p/result/mv_UDP_ISHOD mv $p/result/mv_UDP_ISHOD $p/result/UDP_ISHOD echo "есть исходящие UDP пакеты" else rm -rf $p/result/UDP_ISHOD fi rm -rf $p/result/dump.VHOD $p/result/vhod.obsh $p/result/ishod.obsh $p/result/dump.ISHOD $p/result/ishod.obsh_without_src $p/result/vhod.obsh_without_dst $p/result/dump.VHOD_UDP $p/result/dump.ISHOD_UDP done |
[/codesyntax]