Код: Выделить всё
+---------+---------------+----------+
10:42:29,460,437 ETHER
|0 |ff|ff|ff|ff|ff|ff|00|26|18|f2|0d|36|08|00|45|00|00|50|06|49|00|00|80|11|b1|c9|c0|a8|00|3b|c0|a8|00|ff|18|9d|17|d5|00|3c|1d|a4|4f|4b|2e|2e|2e|2e|20|53|45|52|56|45|52|20|4c|4f|41|44|45|44|21|28|41|54|43|20|73|65|72|76|65|72|73|28|52|44|50|26|46|44|50|29|20|56|65|72|20|39|2e|34|31|29|
+---------+---------------+----------+
10:44:03,147,937 ETHER
|0 |ff|ff|ff|ff|ff|ff|00|26|18|f2|0d|36|08|00|45|00|00|59|06|81|00|00|80|11|b1|88|c0|a8|00|3b|c0|a8|00|ff|18|9d|17|d5|00|45|d4|2b|53|45|54|53|43|54|20|2a|2a|2a|20|20|4f|44|53|2c|53|4f|55|2c|20|4d|4f|57|2c|4e|54|48|2c|20|4c|49|56|2c|43|45|4e|2c|20|54|43|31|2c|54|43|33|2c|54|43|32|2c|20|54|43|35|2c|20|54|43|34|2c|
Код: Выделить всё
1) |0 | бит 1 - преамбула фрема
2) |ff|ff|ff|ff|ff|ff| с 2 по 7 бит - MAC адрес получателя
3) |00|26|18|f2|0d|36| с 8 по 13 бит - MAC адрес отправителя
4) |08|00| с 14 по 15 бит - тип езернета, IPv4
5) |45| 16 бит – длина заголовка
6) |00| 17 бит - ECN-Capable Transport not set
7) |00|50| 18-19 бит TotalLength: 80
8) |06|49| 20-21 бит Identification: 1609
9) |00|00| 22-23 бит FragmentFlags
10) |80| 24 бит время жизни пакета
11) |11| 25 бит – идентификатор протокола ЮДП
12) |b1|c9| 26-27 бит – хешсумма
13) |c0|a8|00|3b| 28-31бит - IP адрес отправителя
14) |c0|a8|00|ff| 32-35 бит - IP адрес получателя
15) |18|9d| 36-37 бит – порт отправителя
16) |17|d5| 38-39 бит – порт получателя
17) |00|3c| 40-41 бит – общая длина
18) |00|3c| 42-43 бит - хеш сумма по портам.
19)|1d|a4|4f|4b|2e|2e|2e|2e|20|53|45|52|56|45|52|20|4c|4f|41|44|45|44|21|28|41|54|43|20|73|65|72|76|65|72|73|28|52|44|50|26|46|44|50|29|20|56|65|72|20|39|2e|34|31|29| 44-97 бит данные
Код: Выделить всё
BEGIN{
FS = "|";
CURRENT_FIELD = 1;
}
!/^+/ && NF > 0 {
if(/^[0-9]/) {
CURRENT_FIELD = 1;
ParseTime001();
}
else {
CURRENT_FIELD = 1;
ParsePreamble010();
ParseMACSrc020();
ParseMACDest030();
ParseEtherType040();
ParseHeadLength050();
ParseECNCapableTransport060();
ParseTotalLength070();
ParseIdentification080();
ParseFragmentFlags090();
ParsePackLifeTime100();
ParseProtocolID110();
ParseHashSum120();
ParseIPSrc130();
ParseIPDest140();
ParsePortSrc150();
ParsePortDest160();
ParseOverallLength170();
ParsePortHash180();
ParseData190();
}
}
function ParseTime001()
{
TIME[1] = 0;
TIME[2] = 0;
TIME[3] = 0;
{
TIME[1] = substr($CURRENT_FIELD,1,2)
TIME[2] = substr($CURRENT_FIELD,4,2)
TIME[3] = substr($CURRENT_FIELD,7,2)
}
DATE_TIME = sprintf("%02d:%02d:%02d",TIME[1],TIME[2],TIME[3]);
printf("Time: %02d:%02d:%02d ",TIME[1],TIME[2],TIME[3]);
}
function ParsePreamble010()
{
CURRENT_FIELD += 1;
}
function ParseMACSrc020()
{
CURRENT_FIELD +=6;
}
function ParseMACDest030()
{
CURRENT_FIELD +=6;
}
function ParseEtherType040()
{
CURRENT_FIELD +=2;
}
function ParseHeadLength050()
{
CURRENT_FIELD +=1;
}
function ParseECNCapableTransport060()
{
CURRENT_FIELD +=1;
}
function ParseTotalLength070()
{
ParseTotalLength[1] = 0;
ParseTotalLength[2] = 0;
ParseTotalLength[2] = 0;
{
CURRENT_FIELD += 1;
ParseTotalLength[1] = $CURRENT_FIELD
CURRENT_FIELD += 1;
ParseTotalLength[2] = $CURRENT_FIELD
#ParseTotalLength[1] + ParseTotalLength[2];
}
sprintf("%02c:%02c",ParseTotalLength[1], ParseTotalLength[2]);
printf("TotalLength: %02d:%02d " ,ParseTotalLength[1], ParseTotalLength[2]);
}
function ParseIdentification080()
{
CURRENT_FIELD +=2;
}
function ParseFragmentFlags090()
{
CURRENT_FIELD +=2;
}
function ParsePackLifeTime100()
{
CURRENT_FIELD +=1;
}
function ParseProtocolID110()
{
CURRENT_FIELD +=1;
}
function ParseHashSum120()
{
CURRENT_FIELD +=2;
}
function ParseIPSrc130()
{
IPSrc130[1] = 0;
IPSrc130[2] = 0;
IPSrc130[3] = 0;
IPSrc130[4] = 0;
{
CURRENT_FIELD += 1;
IPSrc130[1] = $CURRENT_FIELD
CURRENT_FIELD += 1;
IPSrc130[2] = $CURRENT_FIELD
CURRENT_FIELD += 1;
IPSrc130[3] = $CURRENT_FIELD
CURRENT_FIELD += 1;
IPSrc130[4] = $CURRENT_FIELD
}
sprintf("%s:%s:%s:%s",IPSrc130[1],IPSrc130[2],IPSrc130[3],IPSrc130[4]);
printf("Sorce_IP: %s:%s:%s:%s" ,IPSrc130[1],IPSrc130[2],IPSrc130[3],IPSrc130[4]);
}
function ParseIPDest140()
{
IPDest140[1] = 0;
IPDest140[2] = 0;
IPDest140[3] = 0;
IPDest140[4] = 0;
{
CURRENT_FIELD += 1;
IPDest140[1] = $CURRENT_FIELD
CURRENT_FIELD += 1;
IPDest140[2] = $CURRENT_FIELD
CURRENT_FIELD += 1;
IPDest140[3] = $CURRENT_FIELD
CURRENT_FIELD += 1;
IPDest140[4] = $CURRENT_FIELD
}
sprintf("%s:%s:%s:%s",IPDest140[1],IPDest140[2],IPDest140[3],IPDest140[4]);
printf(" Destination_IP: %s:%s:%s:%s",IPDest140[1],IPDest140[2],IPDest140[3],IPDest140[4]);
}
function ParsePortSrc150()
{
CURRENT_FIELD +=2;
}
function ParsePortDest160()
{
CURRENT_FIELD +=2;
}
function ParseOverallLength170()
{
OverallLength170[1] = 0;
OverallLength170[2] = 0;
{
CURRENT_FIELD += 1;
OverallLength170[1] = $CURRENT_FIELD
CURRENT_FIELD += 1;
OverallLength170[2] = $CURRENT_FIELD
}
sprintf("%02s:%02s",OverallLength170[1],OverallLength170[2]);
printf(" Overall_Length: %02s:%02s\n",OverallLength170[1],OverallLength170[2]);
}
function ParsePortHash180()
{
CURRENT_FIELD +=2
}
function ParseData190()
{
CURRENT_FIELD +=1;
??????
}
1) мне нужно реализовать вывод информации не HEX как сей час получется в нормальном виде
2) чтобы остальная часть пакета, которая содержит полезную информацию, то есть данные выводились тоже, в декодированном виде.
Очень долго читал различную литературу, но решение не нашел, уже как неделю мучаюсь(