tcpdump 콘텐츠 캡처 및 IP 기반 데이터 통계

1. 내용 캡처
잡힌 기계 A(각종 시스템, 각종 상자, 각종 텔레비전):
IP:192.168.100.111
게이트웨이: 192.168.100.24
(tcpdump 실행기) 캡처 머신 B:
IP:192.168.100.24
B 기계:#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -A POSTROUTING -s 192.168.100.111 -j MASQUERADE
#tcpdump -i eth0 -nn -vv -tttt -s 65535 host 192.168.100.111 -w tcpdump.txt
캡처한 tcpdump.txt 문서는wireshark를 통해 내용을 읽을 수 있습니다
2. IP 기반 트래픽 통계
문제: IP 통계 데이터에 기반합니다.
하드웨어: 학교 클러스터
불만 사항:
1. 고속 인터넷 카드(기가비트 또는 IB)를 사용하고 인터넷 카드가 부하가 찼을 때 분실률은 어떠한가
2. 프로그램의 cpu 점유율은 어떠한가
3. 로그 파일이 너무 큽니다.
시나리오 및 분석:
1. 클러치의 실현 방식은libpcap 라이브러리, 제로 복사 방식, PF 등 여러 가지가 있다.RING 인터페이스, 시스템 함수 직접 사용
나는 몇몇 문장을 보고 넷스니프-ng 프로그램(제로 복사 기반)을 테스트했다. 나는 제로 복사 방식의 효율이 가장 높고 가방 분실률이 가장 낮다고 생각한다.하지만 난
tcpdump를 테스트했을 때 그 효율도 비교적 높았고(테스트할 때 카드가 거의 부하가 찼음) 가방을 잃어버리지 않았으며 사용하기 편리하기 때문에 기타
요소는 최종적으로 tcpdump를 선택합니다.
2.tcpdump 클러치 테스트 시 cpu 점유율 4% 정도
3. tcpdump는 모든 데이터 패키지를 기록하기 때문에 우리는 모든 패키지가 기록하는 바이트 수(-s 옵션)를 제한할 수 있지만 네트워크 카드가 가득 차서
그래서 가방의 수량이 유난히 많다.다음은 60초 동안 748168개의 가방을 잡았기 때문에 pcap 파일도 유난히 크다.Number of packets: 748168
File size: 58394582 bytes
Data size: 3900660165 bytes
Capture duration: 59.963470 seconds

따라서 나는 -G 옵션을 사용하여 분당 pcap 파일을 기록한 다음에 그 중의 데이터를 통계적으로 삭제하고 마지막에 이 pcap 파일을 삭제한다.즉 분당
다음 파일을 생성합니다 (시간 간격은 필요에 따라 변경할 수 있습니다) File name: /public/home/wangvsa/software/tcp-audit/2012-07-16,12:54:54.pcap
File encapsulation: Ethernet
Number of packets: 748168
File size: 58394582 bytes
Data size: 3900660165 bytes
Capture duration: 59.963470 seconds
Start time: Mon Jul 16 12:54:53 2012
End time: Mon Jul 16 12:55:53 2012
Data rate: 65050607.75 bytes/s
Data rate: 520404861.98 bits/s
IPv4 total packet: 748037source ip port dir dest ip port proto flow10. 10. 10. 61: 9090 > 10. 10. 10. 49: 27884 tcp 17930. 0. 0. 0: 68 > 255.255.255.255: 67 UDP 531010. 10. 10. 49: �C > 10. 10. 10. 62: �C ICMP 234 10. 10. 10. 49: 22 > 10. 10. 10. 61: 47051 tcp 117124 10. 10. 10. 48: 38906 > 10. 10. 10. 49: 16797 tcp 4428897410. 10. 10. 48: 64468 > 10. 10. 10. 49: 45094 tcp 17110. 10. 10. 61: 47051 > 10. 10. 10. 49: 22 tcp 540610. 10. 10. 49: 27884 > 10. 10. 10. 61: 9090 tcp 211210. 10. 10. 49: 45094 > 10. 10. 10. 48: 64468 tcp 10810. 10. 10. 62: �C > 10. 10. 10. 49: �C ICMP 23410. 10. 10. 49: 16797 > 10. 10. 10. 48:38906 tcp 3856230180 구현:
1. pcap 파일에 대한 통계 스크립트 작성(효율에 대한 요구가 높으면 c 언어 프로그램으로 작성할 수 있음), 총 두 개의 파일 tcp-audit.sh와
tcp-reduce.sh.tcp-audit.sh에서 tcp-reduce가 호출되었습니다.sh, 직접 호출하지 마세요.
먼저 tcp-audit를 보세요.sh, 이 파일은ready에서.txt에서 내용을 읽습니다. 줄마다 통계할 pcap 파일의 파일 이름입니다. 잠시 후
어떻게 얻었는지ready.txt 파일.#!/bin/bash
# tcp-audit.sh
# ready.txt ,
# tcp-reduce.sh
#

DIR=”/home/wangchen/shell_ex/”
while read linedo# tcp-reduce.sh 처리 $DIR/tcp-reduce.sh${line}#이 pcap 파일 rm$DIR/${line}#이 줄sed-i'1d'$DIR/ready를 삭제합니다.txtdone < $DIR/ready.txt
다시 tcp-reduce.sh, 이 스크립트는 모든 통계 작업을 완성하고 로그 파일에 출력합니다.이 스크립트는grep와sed 명령을 사용합니다
pcap 파일의 출력을 포맷하면 awk 프로그램에서 사용할 수 있습니다.capinfos라는 프로그램이 제공하는 분석 데이터를 사용했습니다.
주: tcpdump와capinfos 버전이 다르기 때문에 매개 변수 옵션은 수정에 주의해야 합니다.예를 들어capinfos의 -x는 구 버전에서 -i#!/bin/bash
# tcp-reduce.sh
DIR="/home/wangchen/shell_ex"
를 사용했다
# pcap 파일 이름에 따라 로그 파일 이름 구성(시간 이름) tmp1=$*tmp2=(${tmp1//.//}) LOGFILE_NAME=${tmp2[0]}”.log”
# 출력 파일 정보, 즉 NIC 정보capinfos -a -c -d -e -E -s -u -x -y $DIR/$*>> $DIR/$LOGFILE_NAME
# tcpdump 파일로 읽을 수 있는 텍스트 생성 #grep,sed에서 필터링, 교체 처리를 수행한 후 awk#에게 awk 언어로 데이터 줄을 처리하고 IP 기반 데이터 정보 통계 tcpdump -q -n -e -t -r $DIR/$\| grep'IPv4〃 | sed's/,/g;s/>/g;s///g'\|awk'
BEGIN {printf(“”)}{# $5:packet length# $6:source ip.port# $7:destination ip.port# $8:proto
# array_flow는 각 방향의 데이터를 수조로 기록하는 # 그 아래 표는 데이터 전송 방향(문자열)
count++way = $6″.”$7″.”$8for(x in arr_total_flow){if(way==x){arr_total_flow[way] += $5next}}arr_total_flow[way] = $5}
END {printf("IPv4 total packet:%d", NR) printf("%16s%6s%6s%6%19s%6s%6s'%6s: tproto\tflow", "source ip", "port", "dir", "destip", "port") for(x in arr total flow) {6s%s'%d''%d"("p4s total packet packet:%d", NR packet:%d", NR Printf", NR:%d", NR Printf"(", NR:%d", NR'NR'NR'% d''''''>%3s.%3s.%3s.%3s:%6s\t%s\t%d", chunks[1], chunks[2], chunks[3], chunks[4], "-", #소스 주소: 포트 chunks[5], chunks[6], chunks[6][7], chunks[8], "-", #목적 주소: 포트 chunks[9],arrtotal_[x] # 협의 총 유량} else {printf ('%3s.%3s.%3s.%3s.%3s:%6s%3s(%3s.%3s.%3s.%3s.%3s.%3s.%3s.%3s:%3s%3s:%3s3%3s.%3s.%3s.%3s.%3s.%3s.%3s.%%s'%s'%s'%s\t%s'''''''''(''''%3s.3%3s.%3s.3%3s.%3s.%3s.%3s.%3s.%3s.%3s.%3s.%3s.%3s.%flow[x] # 프로토콜 총 트래픽}}}}'>> $DIR/$LOGFILE_NAME
2. 다음은 어떻게 실행하는가의 문제이다. 먼저 루트 권한으로 tcpdump 패키지 프로그램을 실행한다. 내가 사용하는 명령은 다음과 같다. sudo tcpdump -i eth3 -s 84 -G 60 -z ./tcp-add.sh -w %F,%T.pcap
파라미터 분석: - i eth3이eth3에서 패키지를 잡는다. -s84 가방당 최대 84바이트 기록; -G 60은 60초마다 파일 기록을 엽니다.
-z ./tcp-add.sh 협조-G 사용, 매번 파일을 기록한 후 실행./tcp-add.sh 스크립트
- w%F,%T.pcap 출력, 파일 이름 시간 구성%F는 연월일,%T는 시분초, 예를 들어 2012-07-16, 12:54:54.pcap
이 tcp-add를 다시 봅시다.sh, 이 스크립트는 매우 간단합니다. 실제적으로 방금 기록된 pcap 파일 이름을ready에 씁니다.txt 파일에서#!/bin/bash
# tcpdump -z
# pcap ready.txt

echo $* >> ready.txt
이렇게 하면 매 분마다 pcap 파일을 생성하고ready에 파일 이름을 씁니다.txt 파일에서
3. 다음은cron을 사용하여 우리의 통계 임무를 정시에 수행해야 한다.crond 서비스를 시작한 후 다음 명령을 실행합니다
sudo crontab -e
이 명령은 파일을 열고 마지막 줄에 다음과 같이 추가한 다음 종료*/2 * * * * /home/wangchen/shell_ex/tcp-audit.sh를 저장합니다. 이것은 2분마다 tcp-audit을 실행합니다.sh 스크립트.

좋은 웹페이지 즐겨찾기