Fórum Root.cz
Hlavní témata => Software => Téma založeno: veskotskujehnusne 02. 01. 2020, 15:47:16
-
Ahoj, asi jsem si zvolil špatnou utilitu, ale když už to mám rozdělané, dodělal bych to v grepu.
Mám dlouhý seznam vygrepnutých výsledků, ale jde mi o to, že tam mám například pomocí -A více řádků pro záznam. Potřeboval bych to proparsovat dále jak potřebuji, někam přidat data, sloučit výsledky a podobně.
Pokud bych použil grep whole read line, zase se mi to rozpadne na víc řádků i pro jeden výsledek. Dá se nějak vstoupit do toho cyklu, kterým grep prochází a po každém matchnutí provést vlastní kód?
Děkuji.
-
Po matchnuti provest kod... bude umet spis SED nez GREP.
-
Jestli to, co leze z grepu je použitelné, tak to propajpuj dál do SEDu či ještě spíš AWKu (komplexnější věci se dělaj líp v něm).Grep na to použít imho nejde a pro tydle linuxové utility je normální jich pár "propajpovat".
Ale jestli je to složitější práce s textem, možná bude pro Tebe ve výsledku nejjednodušší to postprocessnout v pythonu či perlu.
-
Tady bych byl pro přesedlání na AWK, které to může zvládnout vše naráz i s tím původním grepováním. Pro analýzu logů se mi osvědčilo lépe než grep.
-
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup - třeba v tom pythonu)
-
nastav jako oddělovač konce řádku '--' (jedno v čem), potom můžeš zpracovávat výstupy grep -A najednou
-
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup - třeba v tom pythonu)
U všeho s vyjímkou nejtriviálnějších úloh s awk narazí.
-
Na praci s textem doporucuju PERL, byl pro tyto ucely vyvinut.
Priklad z webu:
use strict;
use warnings;
die "Usage: $0 FILENAMEs\n" if not @ARGV;
foreach my $file (@ARGV) {
open my $fh, '<:encoding(UTF-8)', $file or die;
while (my $line = <$fh>) {
if ($line =~ /REGEX/) {
print $line;
}
}
}
-
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup - třeba v tom pythonu)
U všeho s vyjímkou nejtriviálnějších úloh s awk narazí.
Vůbec netušíme, jakou úlohu vlastně řeší, takže tohle stanovisko je předčasné. Jistě, AWK narazí třeba i při zpracování CSV a podobných špeků, ale proč ho hned zavrhovat? Používám ho často a rád.
-
Na praci s textem doporucuju PERL, byl pro tyto ucely vyvinut.
Priklad z webu:
use strict;
use warnings;
die "Usage: $0 FILENAMEs\n" if not @ARGV;
foreach my $file (@ARGV) {
open my $fh, '<:encoding(UTF-8)', $file or die;
while (my $line = <$fh>) {
if ($line =~ /REGEX/) {
print $line;
}
}
}
Proč tak složitě? Perl to umí i mnohem elegantněji, tohle je spíš úloha pro oneliner.
-
Na praci s textem doporucuju PERL, byl pro tyto ucely vyvinut.
Priklad z webu:
use strict;
use warnings;
die "Usage: $0 FILENAMEs\n" if not @ARGV;
foreach my $file (@ARGV) {
open my $fh, '<:encoding(UTF-8)', $file or die;
while (my $line = <$fh>) {
if ($line =~ /REGEX/) {
print $line;
}
}
}
ten kód souvisí s otázkou jak?
jak píše Kit, výstup grep -A jde zpracovat onelinerem
grep -A 5 neco | perl -lne 'BEGIN {$/ = "--\n"} @lines = split /\n/; '
-
splitování lze zařídit i parametrem -F
grep -A 5 neco | perl -F'\n' -lne 'BEGIN {$/ = "--\n"} print $F[0]'
-
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup - třeba v tom pythonu)
U všeho s vyjímkou nejtriviálnějších úloh s awk narazí.
Hmmm, tak to je úžasný závěr.
-
Grep s akciou pre každý nájdený riadok je awk.
Napríklad „Nájdi riadky začínajúce na "root" a vypíš ich so štyroma nasledovnými riadkami“, resp. emulácia GNU grep -A:
awk '/^root/ { for(i=0; i<5; i++) { print; getline; }}' /etc/passwd
Napríklad „Skupiny z grep -A oddelené dvoma pomlčkami dajte na jeden riadok“
grep -A1 root /etc/passwd | awk '/^--/ { print BUF; BUF=""; next } { BUF = BUF $0 } END { print BUF }'
Resp. plný skript v awk:
/^--/ {
print BUF
BUF=""
next
}
{
BUF = BUF $0
}
END {
print BUF
}
- Druhé pravidlo nalepí každý riadok do buffera BUF.
- Prvé pravidlo vraví, že ak na začiatku riadku sú dve pomlčky --, vyprintuje obsah buffera a vymaže buffer.
- Tretie pravidlo vyprintuje obsah buffera na konci súboru.
-
Grep s akciou pre každý nájdený riadok je awk.
Napríklad „Nájdi riadky začínajúce na "root" a vypíš ich so štyroma nasledovnými riadkami“, resp. emulácia GNU grep -A:
awk '/^root/ { for(i=0; i<5; i++) { print; getline; }}' /etc/passwd
Napríklad „Skupiny z grep -A oddelené dvoma pomlčkami dajte na jeden riadok“
grep -A1 root /etc/passwd | awk '/^--/ { print BUF; BUF=""; next } { BUF = BUF $0 } END { print BUF }'
Resp. plný skript v awk:
/^--/ {
print BUF
BUF=""
next
}
{
BUF = BUF $0
}
END {
print BUF
}
- Druhé pravidlo nalepí každý riadok do buffera BUF.
- Prvé pravidlo vraví, že ak na začiatku riadku sú dve pomlčky --, vyprintuje obsah buffera a vymaže buffer.
- Tretie pravidlo vyprintuje obsah buffera na konci súboru.
přesně to co hawran nechce
pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup
v perlu se obejdete bez explicitního čtení, printování, smyček. Ten příklad se spojením na jeden řádek by vypadal takto
grep -A1 root /etc/passwd | perl -lpe 'BEGIN {$/ = "--\n"} s/\n/ /g'
-
Všem děkuji za rady, ale lepší asi bude, když upřesním, co řeším. Mám pochytané packety do pcap, v některých je záznam o GPS poloze. Já potřebuji získat seznam GPS poloh s časem, který je uveden na první řádce a mezi ideálně časy, kdy v tom packetu ta poloha nebyla. Poloha bývá v packetech nad length 170.
V mém příkladu je GPS poloha například: 14.444723,50.101715
22:09:58.868523 IP (tos 0x60, ttl 125, id 8727, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2217 0000 7d11 e5c7 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b c06d 268f 0043 a7e8 2b41 434b .....m&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3030 50,2019122821100
0x0050: 302c 3233 3832 24 0,2382$
22:09:59.348520 IP (tos 0x60, ttl 125, id 8728, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 2218 0000 7d11 e5c5 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b c06d 268f 0044 6c8f 2b52 4553 .....m&..Dl.+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3039 L50,201912282109
0x0050: 3535 2c32 3338 3124 55,2381$
22:12:06.950835 IP (tos 0x60, ttl 125, id 8729, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2219 0000 7d11 e5c5 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b d13d 268f 0043 8d16 2b41 434b .....=&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3230 50,2019122821120
0x0050: 382c 3233 3834 24 8,2384$
22:12:07.429099 IP (tos 0x60, ttl 125, id 8730, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 221a 0000 7d11 e5c3 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b d13d 268f 0044 5dc8 2b52 4553 .....=&..D].+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3132 L50,201912282112
0x0050: 3033 2c32 3338 3324 03,2383$
22:17:10.346636 IP (tos 0x60, ttl 125, id 8731, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 221b 0000 7d11 e5c3 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b f393 268f 0043 65be 2b41 434b ......&..Ce.+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3730 50,2019122821170
0x0050: 382c 3233 3836 24 8,2386$
22:17:10.766337 IP (tos 0x60, ttl 125, id 8732, offset 0, flags [none], proto UDP (17), length 173)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
0x0000: 4560 00ad 221c 0000 7d11 e56c 0a23 6281 E`.."...}..l.#b.
0x0010: c0a8 080b f393 268f 0099 f2d4 2b42 5546 ......&.....+BUF
0x0020: 463a 4754 4354 4e2c 3535 3031 3031 2c38 F:GTCTN,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 2c30 2c32 2c2c 312c 312c 302e L50,,0,2,,1,1,0.
0x0050: 302c 3432 2c32 3130 2e33 2c31 342e 3434 0,42,210.3,14.44
0x0060: 3435 3132 2c35 302e 3130 3137 3232 2c32 4512,50.101722,2
0x0070: 3031 3931 3232 3832 3130 3935 372c 3032 0191228210957,02
0x0080: 3330 2c30 3030 312c 3430 3332 2c30 3344 30,0001,4032,03D
0x0090: 392c 2c2c 3030 3030 2c32 3031 3931 3232 9,,,0000,2019122
0x00a0: 3832 3131 3430 392c 3233 3835 24 8211409,2385$
22:19:06.951354 IP (tos 0x60, ttl 125, id 8733, offset 0, flags [none], proto UDP (17), length 173)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
0x0000: 4560 00ad 221d 0000 7d11 e56b 0a23 6281 E`.."...}..k.#b.
0x0010: c0a8 080b f393 268f 0099 f7a3 2b52 4553 ......&.....+RES
0x0020: 503a 4754 4354 4e2c 3535 3031 3031 2c38 P:GTCTN,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 2c30 2c32 2c2c 312c 312c 302e L50,,0,2,,1,1,0.
0x0050: 302c 3930 2c32 3039 2e37 2c31 342e 3434 0,90,209.7,14.44
0x0060: 3437 3233 2c35 302e 3130 3137 3135 2c32 4723,50.101715,2
0x0070: 3031 3931 3232 3832 3131 3435 352c 3032 0191228211455,02
0x0080: 3330 2c30 3030 312c 3430 3332 2c30 3344 30,0001,4032,03D
0x0090: 392c 2c2c 3030 3030 2c32 3031 3931 3232 9,,,0000,2019122
0x00a0: 3832 3131 3930 382c 3233 3837 24 8211908,2387$
22:19:16.327809 IP (tos 0x60, ttl 125, id 8734, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 221e 0000 7d11 e5c0 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b c2b5 268f 0043 9598 2b41 434b ......&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3931 50,2019122821191
0x0050: 372c 3233 3839 24 7,2389$
22:19:16.808192 IP (tos 0x60, ttl 125, id 8735, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 221f 0000 7d11 e5be 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b c2b5 268f 0044 6648 2b52 4553 ......&..DfH+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3139 L50,201912282119
0x0050: 3134 2c32 3338 3824 14,2388$
22:21:24.229976 IP (tos 0x60, ttl 125, id 8736, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2220 0000 7d11 e5be 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b de0a 268f 0043 8438 2b41 434b ......&..C.8+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3132 3132 50,2019122821212
0x0050: 352c 3233 3842 24 5,238B$
22:21:24.668765 IP (tos 0x60, ttl 125, id 8737, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 2221 0000 7d11 e5bc 0a23 6281 E`.X"!..}....#b.
0x0010: c0a8 080b de0a 268f 0044 3fff 2b52 4553 ......&..D?.+RES
-
...
přesně to co hawran nechce
:o
Zřejmě víš něco, co nevím já...
-
Já s tím fórem neumím, rozhodl jsem se to trochu anonimizovat, ale když dám upravit, mám nový příspěvek. :)
-
Všem děkuji za rady, ale lepší asi bude, když upřesním, co řeším. Mám pochytané packety do pcap, v některých je záznam o GPS poloze. Já potřebuji získat seznam GPS poloh s časem, který je uveden na první řádce a mezi ideálně časy, kdy v tom packetu ta poloha nebyla. Poloha bývá v packetech nad length 170.
V mém příkladu je GPS poloha například: 14.444723,50.101715
22:09:58.868523 IP (tos 0x60, ttl 125, id 8727, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2217 0000 7d11 e5c7 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b c06d 268f 0043 a7e8 2b41 434b .....m&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3030 50,2019122821100
0x0050: 302c 3233 3832 24 0,2382$
22:09:59.348520 IP (tos 0x60, ttl 125, id 8728, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 2218 0000 7d11 e5c5 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b c06d 268f 0044 6c8f 2b52 4553 .....m&..Dl.+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3039 L50,201912282109
0x0050: 3535 2c32 3338 3124 55,2381$
22:12:06.950835 IP (tos 0x60, ttl 125, id 8729, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2219 0000 7d11 e5c5 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b d13d 268f 0043 8d16 2b41 434b .....=&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3230 50,2019122821120
0x0050: 382c 3233 3834 24 8,2384$
22:12:07.429099 IP (tos 0x60, ttl 125, id 8730, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 221a 0000 7d11 e5c3 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b d13d 268f 0044 5dc8 2b52 4553 .....=&..D].+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3132 L50,201912282112
0x0050: 3033 2c32 3338 3324 03,2383$
22:17:10.346636 IP (tos 0x60, ttl 125, id 8731, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 221b 0000 7d11 e5c3 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b f393 268f 0043 65be 2b41 434b ......&..Ce.+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3730 50,2019122821170
0x0050: 382c 3233 3836 24 8,2386$
22:17:10.766337 IP (tos 0x60, ttl 125, id 8732, offset 0, flags [none], proto UDP (17), length 173)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
0x0000: 4560 00ad 221c 0000 7d11 e56c 0a23 6281 E`.."...}..l.#b.
0x0010: c0a8 080b f393 268f 0099 f2d4 2b42 5546 ......&.....+BUF
0x0020: 463a 4754 4354 4e2c 3535 3031 3031 2c38 F:GTCTN,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 2c30 2c32 2c2c 312c 312c 302e L50,,0,2,,1,1,0.
0x0050: 302c 3432 2c32 3130 2e33 2c31 342e 3434 0,42,210.3,14.44
0x0060: 3435 3132 2c35 302e 3130 3137 3232 2c32 4512,50.101722,2
0x0070: 3031 3931 3232 3832 3130 3935 372c 3032 0191228210957,02
0x0080: 3330 2c30 3030 312c 3430 3332 2c30 3344 30,0001,4032,03D
0x0090: 392c 2c2c 3030 3030 2c32 3031 3931 3232 9,,,0000,2019122
0x00a0: 3832 3131 3430 392c 3233 3835 24 8211409,2385$
22:19:06.951354 IP (tos 0x60, ttl 125, id 8733, offset 0, flags [none], proto UDP (17), length 173)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
0x0000: 4560 00ad 221d 0000 7d11 e56b 0a23 6281 E`.."...}..k.#b.
0x0010: c0a8 080b f393 268f 0099 f7a3 2b52 4553 ......&.....+RES
0x0020: 503a 4754 4354 4e2c 3535 3031 3031 2c38 P:GTCTN,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 2c30 2c32 2c2c 312c 312c 302e L50,,0,2,,1,1,0.
0x0050: 302c 3930 2c32 3039 2e37 2c31 342e 3434 0,90,209.7,14.44
0x0060: 3437 3233 2c35 302e 3130 3137 3135 2c32 4723,50.101715,2
0x0070: 3031 3931 3232 3832 3131 3435 352c 3032 0191228211455,02
0x0080: 3330 2c30 3030 312c 3430 3332 2c30 3344 30,0001,4032,03D
0x0090: 392c 2c2c 3030 3030 2c32 3031 3931 3232 9,,,0000,2019122
0x00a0: 3832 3131 3930 382c 3233 3837 24 8211908,2387$
22:19:16.327809 IP (tos 0x60, ttl 125, id 8734, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 221e 0000 7d11 e5c0 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b c2b5 268f 0043 9598 2b41 434b ......&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3931 50,2019122821191
0x0050: 372c 3233 3839 24 7,2389$
22:19:16.808192 IP (tos 0x60, ttl 125, id 8735, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 221f 0000 7d11 e5be 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b c2b5 268f 0044 6648 2b52 4553 ......&..DfH+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3139 L50,201912282119
0x0050: 3134 2c32 3338 3824 14,2388$
22:21:24.229976 IP (tos 0x60, ttl 125, id 8736, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2220 0000 7d11 e5be 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b de0a 268f 0043 8438 2b41 434b ......&..C.8+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3132 3132 50,2019122821212
0x0050: 352c 3233 3842 24 5,238B$
22:21:24.668765 IP (tos 0x60, ttl 125, id 8737, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 2221 0000 7d11 e5bc 0a23 6281 E`.X"!..}....#b.
0x0010: c0a8 080b de0a 268f 0044 3fff 2b52 4553 ......&..D?.+RES
Normalne vezmi jako zaklad ten muj cyklus nacitani soubor v perlu.
Cti to po radkach, regexem na casovou znacku (22:09:58.868523 IP) poznas prvni radek bloku a vyparsuj si datum, a vynuluj string akumulator,
pak dalsi radky s payloadem poznas regexem podle znacky 0x<numero> (ostatni radky ignoruj), v kazdem takovem radku vyhledej text payload podle pozice na radku az do konce razdku, ten postupne strkej to string akumulatoru az do dalsiho pocatku bloku. V teto chvili zavolej subrutinu, ktera v akumulator retezci regexem vyhleda pozadovane udaje.
Hotovo, trivialita.
Lamat grep bude narocnejsi, nez tenhle primitivni perl skript.
-
Všem děkuji za rady, ale lepší asi bude, když upřesním, co řeším. Mám pochytané packety do pcap, v některých je záznam o GPS poloze. Já potřebuji získat seznam GPS poloh s časem, který je uveden na první řádce a mezi ideálně časy, kdy v tom packetu ta poloha nebyla. Poloha bývá v packetech nad length 170.
V mém příkladu je GPS poloha například: 14.444723,50.101715
22:09:58.868523 IP (tos 0x60, ttl 125, id 8727, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2217 0000 7d11 e5c7 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b c06d 268f 0043 a7e8 2b41 434b .....m&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3030 50,2019122821100
0x0050: 302c 3233 3832 24 0,2382$
22:09:59.348520 IP (tos 0x60, ttl 125, id 8728, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 2218 0000 7d11 e5c5 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b c06d 268f 0044 6c8f 2b52 4553 .....m&..Dl.+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3039 L50,201912282109
0x0050: 3535 2c32 3338 3124 55,2381$
22:12:06.950835 IP (tos 0x60, ttl 125, id 8729, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2219 0000 7d11 e5c5 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b d13d 268f 0043 8d16 2b41 434b .....=&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3230 50,2019122821120
0x0050: 382c 3233 3834 24 8,2384$
22:12:07.429099 IP (tos 0x60, ttl 125, id 8730, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 221a 0000 7d11 e5c3 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b d13d 268f 0044 5dc8 2b52 4553 .....=&..D].+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3132 L50,201912282112
0x0050: 3033 2c32 3338 3324 03,2383$
22:17:10.346636 IP (tos 0x60, ttl 125, id 8731, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 221b 0000 7d11 e5c3 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b f393 268f 0043 65be 2b41 434b ......&..Ce.+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3730 50,2019122821170
0x0050: 382c 3233 3836 24 8,2386$
22:17:10.766337 IP (tos 0x60, ttl 125, id 8732, offset 0, flags [none], proto UDP (17), length 173)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
0x0000: 4560 00ad 221c 0000 7d11 e56c 0a23 6281 E`.."...}..l.#b.
0x0010: c0a8 080b f393 268f 0099 f2d4 2b42 5546 ......&.....+BUF
0x0020: 463a 4754 4354 4e2c 3535 3031 3031 2c38 F:GTCTN,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 2c30 2c32 2c2c 312c 312c 302e L50,,0,2,,1,1,0.
0x0050: 302c 3432 2c32 3130 2e33 2c31 342e 3434 0,42,210.3,14.44
0x0060: 3435 3132 2c35 302e 3130 3137 3232 2c32 4512,50.101722,2
0x0070: 3031 3931 3232 3832 3130 3935 372c 3032 0191228210957,02
0x0080: 3330 2c30 3030 312c 3430 3332 2c30 3344 30,0001,4032,03D
0x0090: 392c 2c2c 3030 3030 2c32 3031 3931 3232 9,,,0000,2019122
0x00a0: 3832 3131 3430 392c 3233 3835 24 8211409,2385$
22:19:06.951354 IP (tos 0x60, ttl 125, id 8733, offset 0, flags [none], proto UDP (17), length 173)
10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
0x0000: 4560 00ad 221d 0000 7d11 e56b 0a23 6281 E`.."...}..k.#b.
0x0010: c0a8 080b f393 268f 0099 f7a3 2b52 4553 ......&.....+RES
0x0020: 503a 4754 4354 4e2c 3535 3031 3031 2c38 P:GTCTN,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 2c30 2c32 2c2c 312c 312c 302e L50,,0,2,,1,1,0.
0x0050: 302c 3930 2c32 3039 2e37 2c31 342e 3434 0,90,209.7,14.44
0x0060: 3437 3233 2c35 302e 3130 3137 3135 2c32 4723,50.101715,2
0x0070: 3031 3931 3232 3832 3131 3435 352c 3032 0191228211455,02
0x0080: 3330 2c30 3030 312c 3430 3332 2c30 3344 30,0001,4032,03D
0x0090: 392c 2c2c 3030 3030 2c32 3031 3931 3232 9,,,0000,2019122
0x00a0: 3832 3131 3930 382c 3233 3837 24 8211908,2387$
22:19:16.327809 IP (tos 0x60, ttl 125, id 8734, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 221e 0000 7d11 e5c0 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b c2b5 268f 0043 9598 2b41 434b ......&..C..+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3131 3931 50,2019122821191
0x0050: 372c 3233 3839 24 7,2389$
22:19:16.808192 IP (tos 0x60, ttl 125, id 8735, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 221f 0000 7d11 e5be 0a23 6281 E`.X"...}....#b.
0x0010: c0a8 080b c2b5 268f 0044 6648 2b52 4553 ......&..DfH+RES
0x0020: 503a 4754 5044 502c 3535 3031 3031 2c38 P:GTPDP,550101,8
0x0030: 3633 3537 3430 3430 3732 3530 3436 2c47 63574040725046,G
0x0040: 4c35 302c 3230 3139 3132 3238 3231 3139 L50,201912282119
0x0050: 3134 2c32 3338 3824 14,2388$
22:21:24.229976 IP (tos 0x60, ttl 125, id 8736, offset 0, flags [none], proto UDP (17), length 87)
10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 59
0x0000: 4560 0057 2220 0000 7d11 e5be 0a23 6281 E`.W"...}....#b.
0x0010: c0a8 080b de0a 268f 0043 8438 2b41 434b ......&..C.8+ACK
0x0020: 3a47 5448 4244 2c35 3530 3130 312c 3836 :GTHBD,550101,86
0x0030: 3335 3734 3034 3037 3235 3034 362c 474c 3574040725046,GL
0x0040: 3530 2c32 3031 3931 3232 3832 3132 3132 50,2019122821212
0x0050: 352c 3233 3842 24 5,238B$
22:21:24.668765 IP (tos 0x60, ttl 125, id 8737, offset 0, flags [none], proto UDP (17), length 88)
10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 60
0x0000: 4560 0058 2221 0000 7d11 e5bc 0a23 6281 E`.X"!..}....#b.
0x0010: c0a8 080b de0a 268f 0044 3fff 2b52 4553 ......&..D?.+RES
A jeste jednodussi bude zkrapka pouzit perl knihovnu na PCAP soubory.
https://metacpan.org/pod/File::PCAP::Reader
Coz je uz uplna trivialita, staci v cyklu nad souborem volak nextpacket(),prevest si HEX payload do ascii stringu a vyparsovate zde regexem GPS pozici.
-
#!/usr/bin/perl -nl
$time = $1 if /^(\d\d:\d\d:\d\d\.\d+) IP/;
$data = $1 if /^\s+0x0050:.*(.{5})$/;
if (/^\s+0x0060:.*(.{16})$/) {
$data .= $1;
print "$time\t$1,$2" if $data =~ /(\d+\.\d+),(\d+\.\d+),/;
}
tohle by mělo fungovat, jestli je poloha pokaždé na stejné pozici, ale jak píše Standa Blábol, lepší použít knihovnu.
-
A nebo prestat onanovat nad Perlem a pouzit veci co jsou na to urceny.
$ tshark -nr dump.pcap -T fields -e frame.time_epoch -e data | while read timestamp hexdata; do echo $timestamp `echo $hexdata | xxd -r -p`; done
1578063514.667469000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
1578063518.964255000 +RESP:GTPDP,550101,863574040725046,GL50,20191228211914,2388$
1578063520.553689000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
... a dale grepovat, sedovat, nebo cokolivstimdaldelat...
-
A nebo prestat onanovat nad Perlem a pouzit veci co jsou na to urceny.
$ tshark -nr dump.pcap -T fields -e frame.time_epoch -e data | while read timestamp hexdata; do echo $timestamp `echo $hexdata | xxd -r -p`; done
1578063514.667469000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
1578063518.964255000 +RESP:GTPDP,550101,863574040725046,GL50,20191228211914,2388$
1578063520.553689000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
... a dale grepovat, sedovat, nebo cokolivstimdaldelat...
on chce vytisknout čas a souřadnice. Moje řešení funguje. Tvoje ne.
-
A nebo prestat onanovat nad Perlem a pouzit veci co jsou na to urceny.
$ tshark -nr dump.pcap -T fields -e frame.time_epoch -e data | while read timestamp hexdata; do echo $timestamp `echo $hexdata | xxd -r -p`; done
1578063514.667469000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
1578063518.964255000 +RESP:GTPDP,550101,863574040725046,GL50,20191228211914,2388$
1578063520.553689000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
... a dale grepovat, sedovat, nebo cokolivstimdaldelat...
Hlavni vyhoda tohoto navrhu oproti trivialnimu pouziti PERL knihovny je v pouziti proklate rychleho BASHE na zpracovani predzvykanych radku a prevod z hexu utilitou XXD, proces vytvaren pro kazdy radek znova.
Takova roztomila fork bombicka.
Otazka je, co ma byt ucelem, jestli jednorazove vyhodnoceni, nebo to ma nekde bezet trvale a generovat reporty.
-
Takova roztomila fork bombicka.
Radsi pouzivejte jen vyrazy kterym rozumite. Tohle opravdu neni fork bomba. Ani malinka.
Otazka je, co ma byt ucelem, jestli jednorazove vyhodnoceni, nebo to ma nekde bezet trvale a generovat reporty.
To souhlasim, ja pochopil ze to chce delat jednorazove. Kazdopadne je to porad lepsi nez ten Perl, ktery pomalu spoleha i na to ze zitra bude 5 stupnu a na nebi videt 823 hvezd.
on chce vytisknout čas a souřadnice. Moje řešení funguje. Tvoje ne.
To nebylo reseni ale ukazka jak se k reseni jednoduse dopracovat. Ale klidne si tu dal hrajte s Perlem, me je to fuk.
-
To nebylo reseni ale ukazka jak se k reseni jednoduse dopracovat. Ale klidne si tu dal hrajte s Perlem, me je to fuk.
vyřešení problému není hraní. Je to kratší a rychlejší než tvoje ukázka jak se možná dá k řešení dopracovat.
Kazdopadne je to porad lepsi nez ten Perl, ktery pomalu spoleha i na to ze zitra bude 5 stupnu a na nebi videt 823 hvezd.
ty žádná konkrétní data neselektuješ, tak nemusíš na nic spoléhat.
-
Děkuji ti, bylo tam pár drobných problémů, ale ty jsem už dořešil. Já bych tohle dohromady sám nedal, Perlu jsem se nikdy nevěnoval a když potřebuji jednorázově vyřešit problém, nehodí se předtím něco týden studovat.
To nebylo reseni ale ukazka jak se k reseni jednoduse dopracovat. Ale klidne si tu dal hrajte s Perlem, me je to fuk.
vyřešení problému není hraní. Je to kratší a rychlejší než tvoje ukázka jak se možná dá k řešení dopracovat.
Kazdopadne je to porad lepsi nez ten Perl, ktery pomalu spoleha i na to ze zitra bude 5 stupnu a na nebi videt 823 hvezd.
ty žádná konkrétní data neselektuješ, tak nemusíš na nic spoléhat.
-
Perlu jsem se nikdy nevěnoval a když potřebuji jednorázově vyřešit problém, nehodí se předtím něco týden studovat.
Rozumnej pristup cloveka, kterej si uvedomuje ze casu neni neomezene a pocitace nejsou jedina vec na svete....
-
Perlu jsem se nikdy nevěnoval a když potřebuji jednorázově vyřešit problém, nehodí se předtím něco týden studovat.
Rozumnej pristup cloveka, kterej si uvedomuje ze casu neni neomezene a pocitace nejsou jedina vec na svete....
rozumnější investice než kombinovat X různých nedokonalých nástrojů, každý s jiným dialektem regexpů, pomocí kterých stejně nic nevyřešíte. Jen prohlásíte, že by to teoreticky šlo. Na "unixovou filozofii" nemám čas. Rovnou to vyřeším v perlu, ruby nebo pythonu.