mirror of https://github.com/dirtbags/fluffy.git
handle icmp
This commit is contained in:
parent
b18f2e9b08
commit
306f0c6264
2
Makefile
2
Makefile
|
@ -1,4 +1,4 @@
|
||||||
CFLAGS = -Wall -Werror
|
CFLAGS = -Wall -Werror -Wno-unused-variable
|
||||||
TARGETS = pmerge puniq p4split pcat
|
TARGETS = pmerge puniq p4split pcat
|
||||||
TARGETS += hd pyesc printfesc xor unhex
|
TARGETS += hd pyesc printfesc xor unhex
|
||||||
|
|
||||||
|
|
22
pcap.c
22
pcap.c
|
@ -19,13 +19,17 @@ pcap_open_in(struct pcap_file *ctx, FILE * f)
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if ((h.version_major != 2) || (h.version_minor != 4))
|
if ((h.version_major != 2) || (h.version_minor != 4)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (ctx->swap)
|
if (ctx->swap) {
|
||||||
h.snaplen = bswap32(h.snaplen);
|
h.snaplen = bswap32(h.snaplen);
|
||||||
if (h.snaplen > MAXFRAME)
|
}
|
||||||
|
if (h.snaplen > MAXFRAME) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
ctx->linktype = h.linktype;
|
||||||
|
|
||||||
ctx->f = f;
|
ctx->f = f;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -36,8 +40,9 @@ pcap_open_out(struct pcap_file *ctx, FILE * f)
|
||||||
{
|
{
|
||||||
struct pcap_file_header h = { MAGIC, 2, 4, 0, 0, MAXFRAME, 1 };
|
struct pcap_file_header h = { MAGIC, 2, 4, 0, 0, MAXFRAME, 1 };
|
||||||
|
|
||||||
if (1 != fwrite(&h, sizeof(h), 1, f))
|
if (1 != fwrite(&h, sizeof(h), 1, f)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
ctx->f = f;
|
ctx->f = f;
|
||||||
ctx->swap = 0;
|
ctx->swap = 0;
|
||||||
|
|
||||||
|
@ -58,8 +63,9 @@ pcap_read_pkthdr(struct pcap_file *ctx, struct pcap_pkthdr *hdr)
|
||||||
hdr->len = bswap32(hdr->len);
|
hdr->len = bswap32(hdr->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdr->caplen > MAXFRAME)
|
if (hdr->caplen > MAXFRAME) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -76,12 +82,14 @@ pcap_write_pkthdr(struct pcap_file *ctx, struct pcap_pkthdr *hdr)
|
||||||
hdr->caplen = bswap32(hdr->caplen);
|
hdr->caplen = bswap32(hdr->caplen);
|
||||||
hdr->len = bswap32(hdr->len);
|
hdr->len = bswap32(hdr->len);
|
||||||
|
|
||||||
if (1 != fwrite(&ohdr, sizeof(ohdr), 1, ctx->f))
|
if (1 != fwrite(&ohdr, sizeof(ohdr), 1, ctx->f)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (1 != fwrite(hdr, sizeof(*hdr), 1, ctx->f))
|
if (1 != fwrite(hdr, sizeof(*hdr), 1, ctx->f)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
8
pcap.h
8
pcap.h
|
@ -3,13 +3,19 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define MAGIC 0xa1b2c3d4
|
#define MAGIC 0xa1b2c3d4
|
||||||
#define MAXFRAME 9000
|
#define MAXFRAME 9000
|
||||||
|
|
||||||
|
/* Described at http://www.tcpdump.org/linktypes.html */
|
||||||
|
#define LINKTYPE_ETHERNET 1
|
||||||
|
#define LINKTYPE_RAW 101
|
||||||
|
|
||||||
struct pcap_file {
|
struct pcap_file {
|
||||||
FILE *f;
|
FILE *f;
|
||||||
int swap;
|
uint32_t linktype;
|
||||||
|
bool swap;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pcap_file_header {
|
struct pcap_file_header {
|
||||||
|
|
39
pcat.c
39
pcat.c
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
#define IPPROTO_TCP 6
|
#define IPPROTO_TCP 6
|
||||||
#define IPPROTO_UDP 17
|
#define IPPROTO_UDP 17
|
||||||
|
#define IPPROTO_ICMP 1
|
||||||
|
|
||||||
#define TH_FIN 0x01
|
#define TH_FIN 0x01
|
||||||
#define TH_SYN 0x02
|
#define TH_SYN 0x02
|
||||||
#define TH_RST 0x04
|
#define TH_RST 0x04
|
||||||
|
@ -44,10 +46,7 @@ process_tcp(struct stream *s, char *saddr_s, char *daddr_s)
|
||||||
printf("!");
|
printf("!");
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("TCP4 %s,%u,%u %s,%u,%u ", saddr_s, sport, seq, daddr_s, dport, ack);
|
printf("TCP %s,%u,%u %s,%u,%u ", saddr_s, sport, seq, daddr_s, dport, ack);
|
||||||
|
|
||||||
// shut the compiler up
|
|
||||||
if (false && urgent && chksum && window && flags && ack && seq && false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -58,10 +57,17 @@ process_udp(struct stream *s, char *saddr_s, char *daddr_s)
|
||||||
uint16_t len = read_uint16be(s);
|
uint16_t len = read_uint16be(s);
|
||||||
uint16_t chksum = read_uint16be(s);
|
uint16_t chksum = read_uint16be(s);
|
||||||
|
|
||||||
printf("UDP4 %s,%u %s,%u ", saddr_s, sport, daddr_s, dport);
|
printf("UDP %s,%u %s,%u ", saddr_s, sport, daddr_s, dport);
|
||||||
|
}
|
||||||
|
|
||||||
// Now, do some shit!
|
void
|
||||||
if (false && len && chksum && false);
|
process_icmp(struct stream *s, char *saddr_s, char *daddr_s)
|
||||||
|
{
|
||||||
|
uint8_t type = read_uint8(s);
|
||||||
|
uint8_t code = read_uint8(s);
|
||||||
|
uint16_t checksum = read_uint16be(s);
|
||||||
|
|
||||||
|
printf("ICMP %s %s %d ", saddr_s, daddr_s, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -98,17 +104,15 @@ process_ip4(struct stream *s)
|
||||||
case IPPROTO_UDP:
|
case IPPROTO_UDP:
|
||||||
process_udp(s, saddr_s, daddr_s);
|
process_udp(s, saddr_s, daddr_s);
|
||||||
break;
|
break;
|
||||||
|
case IPPROTO_ICMP:
|
||||||
|
process_icmp(s, saddr_s, daddr_s);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("P%d %s %s ", proto, saddr_s, daddr_s);
|
printf("P%d %s %s ", proto, saddr_s, daddr_s);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
print_payload(s);
|
print_payload(s);
|
||||||
|
|
||||||
/*
|
|
||||||
* Placate compiler
|
|
||||||
*/
|
|
||||||
if (false && chksum && id && tos && ttl && off && false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,14 +141,21 @@ print_ethernet(struct stream *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_frame(struct pcap_pkthdr *hdr, char const *frame)
|
print_frame(struct pcap_file *p, struct pcap_pkthdr *hdr, char const *frame)
|
||||||
{
|
{
|
||||||
struct stream streambuf;
|
struct stream streambuf;
|
||||||
struct stream *s = &streambuf;
|
struct stream *s = &streambuf;
|
||||||
|
|
||||||
sinit(s, frame, hdr->caplen);
|
sinit(s, frame, hdr->caplen);
|
||||||
printf("%u.%u ", hdr->ts.tv_sec, hdr->ts.tv_usec);
|
printf("%u.%u ", hdr->ts.tv_sec, hdr->ts.tv_usec);
|
||||||
|
switch (p->linktype) {
|
||||||
|
case LINKTYPE_ETHERNET:
|
||||||
print_ethernet(s);
|
print_ethernet(s);
|
||||||
|
break;
|
||||||
|
case LINKTYPE_RAW:
|
||||||
|
process_ip4(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +179,7 @@ pcat(FILE * f)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
print_frame(&hdr, frame);
|
print_frame(&p, &hdr, frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue