/* Copyright 1998 by Vadim Kolontsov * All rights reserved * * Distribute freely, except: don't remove my name from the source or * documentation (don't take credit for my work), mark your changes (don't * get me blamed for your possible bugs), don't alter or remove this * notice. May be sold if buildable source is provided to buyer. No * warrantee of any kind, express or implied, is included with this * software; use at your own risk, responsibility for damages (if any) to * anyone resulting from the use of this software rests entirely with the * user. * * Send bug reports, bug fixes, enhancements, requests, flames, etc., and * I'll try to keep a version up to date. I can be reached as follows: * * Vadim Kolontsov */ #include #include #include #include #include #include #include #include #include #ifdef LINUX #include #else #include #endif #include #include "config.h" extern struct in_addr broadcast; void ip_analyze(const struct ip *ip, int length) { char *type, *dst; char tmsg[100]; struct icmp *icmp; if (ip->ip_ttl == 1) { switch (ip->ip_p) { case IPPROTO_ICMP: icmp = (struct icmp *)((u_char *)ip+ip->ip_hl*4); if (icmp->icmp_type != ICMP_ECHO) return; type = "ICMP-based"; break; case IPPROTO_UDP: type = "UDP-based"; break; default: return; } if (ip->ip_dst.s_addr == broadcast.s_addr) return; dst = strdup(inet_ntoa(ip->ip_dst)); sprintf(tmsg,"%s traceroute attempt to %s from %s\n", type, dst, (char *)inet_ntoa(ip->ip_src)); log(tmsg); free(dst); } }