분석에 추가로 사용하기 위해 gawk를 사용하여 mrt 파일에서 추적 정보를 추출하고 있습니다. pcap 파일 형식에서 추적 정보를 성공적으로 추출했지만 mrt 형식의 추적 정보를 파악할 수 없습니다. 먼저 pcap 형식의 예를 보여줌으로써 추출하려는 내용을 설명하겠습니다.
내 pcap 입력 파일은 다음과 같습니다
No. Time Source Destination Protocol Length User Datagram Protocol Info
1 0.000000 2001:4958:10:2::2 2001:4958:10:2::3 BGP 143 UPDATE Message
Frame 1: 143 bytes on wire (1144 bits), 143 bytes captured (1144 bits)
Ethernet II, Src: JuniperN_36:98:52 (5c:5e:ab:36:98:52), Dst: JuniperN_3e:bf:49 (78:19:f7:3e:bf:49)
Internet Protocol Version 6, Src: 2001:4958:10:2::2 (2001:4958:10:2::2), Dst: 2001:4958:10:2::3 (2001:4958:10:2::3)
Transmission Control Protocol, Src Port: bgp (179), Dst Port: 56797 (56797), Seq: 1, Ack: 1, Len: 37
Border Gateway Protocol
No. Time Source Destination Protocol Length User Datagram Protocol Info
2 0.326625 2001:4958:10:2::2 2001:4958:10:2::3 BGP 184 UPDATE Message
Frame 2: 184 bytes on wire (1472 bits), 184 bytes captured (1472 bits)
Ethernet II, Src: JuniperN_36:98:52 (5c:5e:ab:36:98:52), Dst: JuniperN_3e:bf:49 (78:19:f7:3e:bf:49)
Internet Protocol Version 6, Src: 2001:4958:10:2::2 (2001:4958:10:2::2), Dst: 2001:4958:10:2::3 (2001:4958:10:2::3)
Transmission Control Protocol, Src Port: bgp (179), Dst Port: 56797 (56797), Seq: 38, Ack: 1, Len: 78
Border Gateway Protocol
No. Time Source Destination Protocol Length User Datagram Protocol Info
3 1.178114 2001:4958:10:2::2 2001:4958:10:2::3 TCP 106 bgp > 56797 [ACK] Seq=116 Ack=20 Win=16384 Len=0 TSval=3269200636 TSecr=371929488
Frame 3: 106 bytes on wire (848 bits), 106 bytes captured (848 bits)
Ethernet II, Src: JuniperN_36:98:52 (5c:5e:ab:36:98:52), Dst: JuniperN_3e:bf:49 (78:19:f7:3e:bf:49)
Internet Protocol Version 6, Src: 2001:4958:10:2::2 (2001:4958:10:2::2), Dst: 2001:4958:10:2::3 (2001:4958:10:2::3)
Transmission Control Protocol, Src Port: bgp (179), Dst Port: 56797 (56797), Seq: 116, Ack: 20, Len: 0
No. Time Source Destination Protocol Length User Datagram Protocol Info
4 2.410144 64.251.87.209 64.251.87.210 BGP 228 UPDATE Message, UPDATE Message
Frame 4: 228 bytes on wire (1824 bits), 228 bytes captured (1824 bits)
Ethernet II, Src: Cisco_e7:a1:c0 (00:1b:0d:e7:a1:c0), Dst: JuniperN_3e:ba:bd (78:19:f7:3e:ba:bd)
Internet Protocol Version 4, Src: 64.251.87.209 (64.251.87.209), Dst: 64.251.87.210 (64.251.87.210)
Transmission Control Protocol, Src Port: bgp (179), Dst Port: 65502 (65502), Seq: 1, Ack: 1, Len: 154
Border Gateway Protocol
Border Gateway Protocol
No. Time Source Destination Protocol Length User Datagram Protocol Info
5 3.467853 206.47.102.206 206.47.102.201 BGP 105 KEEPALIVE Message
Frame 5: 105 bytes on wire (840 bits), 105 bytes captured (840 bits)
Ethernet II, Src: JuniperN_36:98:52 (5c:5e:ab:36:98:52), Dst: JuniperN_3e:bf:49 (78:19:f7:3e:bf:49)
Internet Protocol Version 4, Src: 206.47.102.206 (206.47.102.206), Dst: 206.47.102.201 (206.47.102.201)
Transmission Control Protocol, Src Port: bgp (179), Dst Port: 55700 (55700), Seq: 1, Ack: 1, Len: 19
Border Gateway Protocol
파일에서 다음 필드를 추출하고 싶습니다.
- 시간
- 원천
- 목적지
- 규약
- 사용자 데이터그램 길이
간단한 스크립트를 만들었습니다.
{
if($1 ~ /[0-9]/)
{
print $2,$3,$4,$5,$6
}
}
입력 추적에서 실행하여 다음과 같이 (gawk -f script.txt input-pcap.txt >> pcap-out.txt)을 수신합니다.
0.000000 2001:4958:10:2::2 2001:4958:10:2::3 BGP 143
0.326625 2001:4958:10:2::2 2001:4958:10:2::3 BGP 184
1.178114 2001:4958:10:2::2 2001:4958:10:2::3 TCP 106
2.410144 64.251.87.209 64.251.87.210 BGP 228
3.467853 206.47.102.206 206.47.102.201 BGP 105
이제 mrt 입력 형식으로 동일한 작업을 수행하고 싶습니다. 입력 파일은 다음과 같습니다.
TIME: 11/01/07 00:11:09
TYPE: TABLE_DUMP/INET
VIEW: 0
SEQUENCE: 0
PREFIX: 0.0.0.0/0
FROM:96.4.0.55 AS11686
ORIGINATED: 10/24/07 06:26:23
ORIGIN: IGP
ASPATH: 11686 3561
NEXT_HOP: 96.4.0.55
STATUS: 0x1
TIME: 11/01/07 00:11:09TYPE: TABLE_DUMP/INETVIEW: 0SEQUENCE: 1PREFIX: 0.0.0.0/0
FROM:213.140.32.148 AS12956
ORIGINATED: 10/24/07 06:26:16
ORIGIN: IGP
ASPATH: 12956
NEXT_HOP: 213.140.32.148
STATUS:0x1
TIME: 11/01/07 00:11:09
TYPE: TABLE_DUMP/INET
VIEW: 0
SEQUENCE: 2
PREFIX: 3.0.0.0/8
FROM:207.45.223.244 AS6453
ORIGINATED: 10/31/07 07:37:39
ORIGIN: IGP
ASPATH: 6453 701 703 80
NEXT_HOP: 207.45.223.244
STATUS: 0x1
TIME: 11/01/07 00:11:09
TYPE: TABLE_DUMP/INET
VIEW: 0
SEQUENCE: 3
PREFIX: 3.0.0.0/8
FROM:195.219.96.239 AS6453
ORIGINATED: 10/31/07 07:49:07
ORIGIN: IGP
ASPATH: 6453 701 703 80
NEXT_HOP: 195.219.96.239
STATUS: 0x1
TIME: 11/01/07 00:11:09
TYPE: TABLE_DUMP/INET
VIEW: 0
SEQUENCE: 4
PREFIX: 3.0.0.0/8
FROM:129.250.0.11 AS2914
ORIGINATED: 10/31/07 06:09:07
ORIGIN: IGP
ASPATH: 2914 701 703 80
NEXT_HOP: 129.250.0.11
MULTI_EXIT_DISC: 6
COMMUNITY: 2914:420 2914:2000 2914:3000 65504:701
STATUS: 0x1
분석 소프트웨어가 읽을 수 있도록 pcap 형식과 동일한 방식으로 다음 정보를 추출하고 싶습니다.
- 시간(첫 번째 패킷 시간 필드와의 차이(초))
- 발신자(필드 6, IP 주소만)
- Next_hop(필드 10)
- 프로토콜/소스(필드 8)
따라서 출력은 다음과 같습니다.
0.0000 96.4.0.55 96.4.0.55 IGP
0.0000 213.140.32.148 213.140.32.148 IGP
0.0000 207.45.223.244 207.45.223.244 IGP
0.0000 195.219.96.239 195.219.96.239 IGP
답변1
gawk
다음 스크립트에서는 다음 사항을 고려해야 합니다.
date
입력 날짜에는 세기가 표시되지 않으므로 이 형식이 기본 형식과 어떻게 관련되는지 고려해야 합니다 .제공된 예제 출력에는 소수 시간이 표시되지만 설명에는 초가 표시됩니다. 데이터는 초 단위이므로 이 스크립트는 정수 초를 출력합니다.
gawk 'function d2s( date ){ c="date -d\""date"\" +%s"; c|getline b; close(c); return gensub("\n","","",b) }
BEGIN{ RS="\n *\n" }
{
nf=split($0,f,"\n"); delete o
for(fi=1;fi<=nf;fi++){
split(f[fi],s," ")
if( s[1]=="TIME:" ) o[1]=s[2]" "s[3]
if( s[1]=="FROM:" ) o[2]=s[2]
if( s[1]=="NEXT_HOP:" ) o[3]=s[2]
if( s[1]=="ORIGIN:" ) o[4]=s[2]
}
if( o[1] ){
if( fps ) tds=d2s(o[1])-fps
else { tds=0; fps=d2s(o[1]) }
printf( "%s %s %s %s\n", tds, o[2], o[3], o[4] )
}
}' "$f"
출력 - 입력 시간이 게시된 시간과 다릅니다(둘 다 동일함).
0 96.4.0.55 96.4.0.55 IGP
1 213.140.32.148 213.140.32.148 IGP
3 207.45.223.244 207.45.223.244 IGP
7 195.219.96.239 195.219.96.239 IGP
15 129.250.0.11 129.250.0.11 IGP