mirror of https://github.com/dirtbags/fluffy.git
New skip utility
This commit is contained in:
parent
12f18a513f
commit
0c37c73a8e
41
README.md
41
README.md
|
@ -63,14 +63,43 @@ The following pipe is equivalent to "cat":
|
||||||
./xor 42 | ./xor -x 2A
|
./xor 42 | ./xor -x 2A
|
||||||
|
|
||||||
|
|
||||||
|
### skip: discard initial octets
|
||||||
|
|
||||||
|
Throws away some initial octets from stdin,
|
||||||
|
and sends the rest to stdout.
|
||||||
|
You could use `dd` for the same purpose.
|
||||||
|
|
||||||
|
This skip command:
|
||||||
|
|
||||||
|
skip 5
|
||||||
|
|
||||||
|
Is equivalent to this `dd` command:
|
||||||
|
|
||||||
|
dd skip=5 bs=1 status=none
|
||||||
|
|
||||||
|
|
||||||
### pcat: print text representation of pcap file
|
### pcat: print text representation of pcap file
|
||||||
|
|
||||||
Prints a (lossy) text representation of a pcap file to stdout.
|
Prints a (lossy) text representation of a pcap file to stdout.
|
||||||
|
|
||||||
This program is the keystone of the Fluffy Suite.
|
This program is the keystone of the Fluffy Suite.
|
||||||
By representing everything as text,
|
By representing everything as text,
|
||||||
programmers can use any number of standard Unix text processing tools,
|
programmers can use any number of standard Unix text processing tools,
|
||||||
such as sed, awk, cut, grep, or head.
|
such as sed, awk, cut, grep, or head.
|
||||||
|
|
||||||
|
Output is tab-separated, of the format:
|
||||||
|
|
||||||
|
timestamp protocol options src dst payload
|
||||||
|
|
||||||
|
Frequently you are only interested in the payload,
|
||||||
|
so you can run pcat like:
|
||||||
|
|
||||||
|
cat myfile.pcap | pcat | cut -f 6
|
||||||
|
|
||||||
|
Remember the `unhex` program,
|
||||||
|
which will convert payloads to an octet stream,
|
||||||
|
after you have done any maniuplations you want.
|
||||||
|
|
||||||
|
|
||||||
### pmerge: merge pcap files
|
### pmerge: merge pcap files
|
||||||
|
|
||||||
|
@ -79,18 +108,18 @@ Takes a list of pcap files, assuming they are sorted by time
|
||||||
and merges them into a single sorted output.
|
and merges them into a single sorted output.
|
||||||
|
|
||||||
|
|
||||||
### printfesc: printf escape input
|
|
||||||
|
|
||||||
Reads octets,
|
|
||||||
writes a string suitable for copy-paste into printf.
|
|
||||||
|
|
||||||
|
|
||||||
### puniq: omit repeated frames
|
### puniq: omit repeated frames
|
||||||
|
|
||||||
Removes duplicate frames from input,
|
Removes duplicate frames from input,
|
||||||
writing to output.
|
writing to output.
|
||||||
|
|
||||||
|
|
||||||
|
### printfesc: printf escape input
|
||||||
|
|
||||||
|
Reads octets,
|
||||||
|
writes a string suitable for copy-paste into printf.
|
||||||
|
|
||||||
|
|
||||||
### pyesc: python escape input
|
### pyesc: python escape input
|
||||||
|
|
||||||
Escapes input octets for pasting into a python "print" statement.
|
Escapes input octets for pasting into a python "print" statement.
|
||||||
|
|
10
pcat.c
10
pcat.c
|
@ -78,7 +78,7 @@ process_tcp(struct stream *s, char *saddr_s, char *daddr_s)
|
||||||
printf("!");
|
printf("!");
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("TCP %s,%u %s,%u %u,%u,%d ", saddr_s, sport, daddr_s, dport, seq, ack, flags);
|
printf("TCP\t%s,%u\t%s,%u\t%u,%u,%d\t", saddr_s, sport, daddr_s, dport, seq, ack, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -89,7 +89,7 @@ process_udp(struct stream *s, char *saddr_s, char *daddr_s)
|
||||||
uint16_t len = read_uint16(s);
|
uint16_t len = read_uint16(s);
|
||||||
uint16_t chksum = read_uint16(s);
|
uint16_t chksum = read_uint16(s);
|
||||||
|
|
||||||
printf("UDP %s,%u %s,%u 0 ", saddr_s, sport, daddr_s, dport);
|
printf("UDP\t%s,%u\t%s,%u\t0\t", saddr_s, sport, daddr_s, dport);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -99,7 +99,7 @@ process_icmp(struct stream *s, char *saddr_s, char *daddr_s)
|
||||||
uint8_t code = read_uint8(s);
|
uint8_t code = read_uint8(s);
|
||||||
uint16_t checksum = read_uint16(s);
|
uint16_t checksum = read_uint16(s);
|
||||||
|
|
||||||
printf("ICMP %d,%d %s %s ", type, code, saddr_s, daddr_s);
|
printf("ICMP\t%d,%d\t%s\t%s\t", type, code, saddr_s, daddr_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -140,7 +140,7 @@ process_ip4(struct stream *s)
|
||||||
process_icmp(s, saddr_s, daddr_s);
|
process_icmp(s, saddr_s, daddr_s);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("P%d %s %s ", proto, saddr_s, daddr_s);
|
printf("P%d\t%s\t%s\t", proto, saddr_s, daddr_s);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ print_frame(struct pcap_file *p, struct pcap_pkthdr *hdr, char const *frame)
|
||||||
struct stream *s = &streambuf;
|
struct stream *s = &streambuf;
|
||||||
|
|
||||||
sinit(s, frame, hdr->caplen, ENDIAN_NETWORK); // pcap.c always outputs network byte order
|
sinit(s, frame, hdr->caplen, ENDIAN_NETWORK); // pcap.c always outputs network byte order
|
||||||
printf("%u.%u ", hdr->ts.tv_sec, hdr->ts.tv_usec);
|
printf("%u.%u\t", hdr->ts.tv_sec, hdr->ts.tv_usec);
|
||||||
switch (p->linktype) {
|
switch (p->linktype) {
|
||||||
case LINKTYPE_ETHERNET:
|
case LINKTYPE_ETHERNET:
|
||||||
print_ethernet(s);
|
print_ethernet(s);
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* skip octets -- 2017 Neale Pickett <zephyr@dirtbags.net>
|
||||||
|
*
|
||||||
|
* This file is in the public domain. I make no promises about the functionality
|
||||||
|
* of this program.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
long int count;
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
fprintf(stderr, "Usage: %s count\n", argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
count = strtol(argv[1], NULL, 0);
|
||||||
|
/* Throw away count octets */
|
||||||
|
for (; count > 0; count -= 1) {
|
||||||
|
int c = getchar();
|
||||||
|
|
||||||
|
if (EOF == c) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Spit out the rest */
|
||||||
|
while (1) {
|
||||||
|
int c = getchar();
|
||||||
|
|
||||||
|
if (EOF == c) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
putchar(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue