Include lots of header files, rather than relying on O/S specific ones.
This commit is contained in:
5
Makefile
5
Makefile
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
# Give the location of pcap.h here:
|
# Give the location of pcap.h here:
|
||||||
CFLAGS += -I/usr/include/pcap
|
CFLAGS += -I/usr/include/pcap
|
||||||
|
# CFLAGS += -I/usr/pkg/include
|
||||||
# CFLAGS += -pg -a
|
# CFLAGS += -pg -a
|
||||||
|
|
||||||
# Give the location of libpcap here if it's not in one of the standard
|
# Give the location of libpcap here if it's not in one of the standard
|
||||||
@@ -29,7 +30,7 @@ MANDIR = man
|
|||||||
#MANDIR = share/man # FHS-ish
|
#MANDIR = share/man # FHS-ish
|
||||||
|
|
||||||
# You shouldn't need to change anything below this point.
|
# You shouldn't need to change anything below this point.
|
||||||
VERSION = 0.9pre1
|
VERSION = 0.9pre2
|
||||||
CFLAGS += -g -Wall "-DIFTOP_VERSION=\"$(VERSION)\""
|
CFLAGS += -g -Wall "-DIFTOP_VERSION=\"$(VERSION)\""
|
||||||
LDFLAGS += -g
|
LDFLAGS += -g
|
||||||
LDLIBS += -lpcap -lpthread -lcurses -lm
|
LDLIBS += -lpcap -lpthread -lcurses -lm
|
||||||
@@ -37,7 +38,7 @@ LDLIBS += -lpcap -lpthread -lcurses -lm
|
|||||||
SRCS = iftop.c addr_hash.c hash.c ns_hash.c resolver.c ui.c util.c sorted_list.c\
|
SRCS = iftop.c addr_hash.c hash.c ns_hash.c resolver.c ui.c util.c sorted_list.c\
|
||||||
options.c serv_hash.c threadprof.c
|
options.c serv_hash.c threadprof.c
|
||||||
HDRS = addr_hash.h hash.h iftop.h ns_hash.h resolver.h sorted_list.h ui.h options.h sll.h\
|
HDRS = addr_hash.h hash.h iftop.h ns_hash.h resolver.h sorted_list.h ui.h options.h sll.h\
|
||||||
serv_hash.h threadprof.h
|
serv_hash.h threadprof.h ether.h ip.h tcp.h
|
||||||
TXTS = README CHANGES INSTALL TODO iftop.8 COPYING
|
TXTS = README CHANGES INSTALL TODO iftop.8 COPYING
|
||||||
SPECFILE = iftop.spec
|
SPECFILE = iftop.spec
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
17
ether.h
Normal file
17
ether.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#ifndef __ETHER_H_
|
||||||
|
#define __ETHER_H_
|
||||||
|
|
||||||
|
#define ETHERTYPE_PUP 0x0200
|
||||||
|
#define ETHERTYPE_IP 0x0800
|
||||||
|
#define ETHERTYPE_ARP 0x0806
|
||||||
|
#define ETHERTYPE_REVARP 0x8035
|
||||||
|
|
||||||
|
#define ETHER_ADDR_LEN 6
|
||||||
|
|
||||||
|
struct ether_header {
|
||||||
|
u_int8_t ether_dhost[ETHER_ADDR_LEN];
|
||||||
|
u_int8_t ether_shost[ETHER_ADDR_LEN];
|
||||||
|
u_int16_t ether_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
18
iftop.c
18
iftop.c
@@ -8,13 +8,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#include <net/ethernet.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <netinet/tcp.h>
|
|
||||||
#include <netinet/udp.h>
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <curses.h>
|
#include <curses.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@@ -28,6 +25,9 @@
|
|||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "sll.h"
|
#include "sll.h"
|
||||||
#include "threadprof.h"
|
#include "threadprof.h"
|
||||||
|
#include "ether.h"
|
||||||
|
#include "ip.h"
|
||||||
|
#include "tcp.h"
|
||||||
|
|
||||||
|
|
||||||
unsigned char if_hw_addr[6]; /* ethernet address of interface. */
|
unsigned char if_hw_addr[6]; /* ethernet address of interface. */
|
||||||
@@ -132,13 +132,13 @@ void assign_addr_pair(addr_pair* ap, struct ip* iptr, int flip) {
|
|||||||
unsigned short int dst_port = 0;
|
unsigned short int dst_port = 0;
|
||||||
|
|
||||||
/* Does this protocol use ports? */
|
/* Does this protocol use ports? */
|
||||||
if(iptr->ip_p == IPPROTO_TCP || iptr->ip_p == IPPROTO_UDP) {
|
if(iptr->ip_p == IPPROTO_TCP || IP_HL(iptr) == IPPROTO_UDP) {
|
||||||
/* We take a slight liberty here by treating UDP the same as TCP */
|
/* We take a slight liberty here by treating UDP the same as TCP */
|
||||||
|
|
||||||
/* Find the TCP/UDP header */
|
/* Find the TCP/UDP header */
|
||||||
struct tcphdr* thdr = ((void*)iptr) + iptr->ip_hl * 4;
|
struct tcphdr* thdr = ((void*)iptr) + IP_HL(iptr) * 4;
|
||||||
src_port = ntohs(thdr->source);
|
src_port = ntohs(thdr->th_sport);
|
||||||
dst_port = ntohs(thdr->dest);
|
dst_port = ntohs(thdr->th_dport);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flip == 0) {
|
if(flip == 0) {
|
||||||
|
|||||||
159
ip.h
Normal file
159
ip.h
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
/* @(#) $Header$ (LBL) */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1982, 1986, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Berkeley and its contributors.
|
||||||
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)ip.h 8.2 (Berkeley) 6/1/94
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for internet protocol version 4.
|
||||||
|
* Per RFC 791, September 1981.
|
||||||
|
*/
|
||||||
|
#define IPVERSION 4
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure of an internet header, naked of options.
|
||||||
|
*
|
||||||
|
* We declare ip_len and ip_off to be short, rather than u_short
|
||||||
|
* pragmatically since otherwise unsigned comparisons can result
|
||||||
|
* against negative integers quite easily, and fail in subtle ways.
|
||||||
|
*/
|
||||||
|
struct ip {
|
||||||
|
u_int8_t ip_vhl; /* header length, version */
|
||||||
|
#define IP_V(ip) (((ip)->ip_vhl & 0xf0) >> 4)
|
||||||
|
#define IP_HL(ip) ((ip)->ip_vhl & 0x0f)
|
||||||
|
u_int8_t ip_tos; /* type of service */
|
||||||
|
u_int16_t ip_len; /* total length */
|
||||||
|
u_int16_t ip_id; /* identification */
|
||||||
|
u_int16_t ip_off; /* fragment offset field */
|
||||||
|
#define IP_DF 0x4000 /* dont fragment flag */
|
||||||
|
#define IP_MF 0x2000 /* more fragments flag */
|
||||||
|
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
|
||||||
|
u_int8_t ip_ttl; /* time to live */
|
||||||
|
u_int8_t ip_p; /* protocol */
|
||||||
|
u_int16_t ip_sum; /* checksum */
|
||||||
|
struct in_addr ip_src,ip_dst; /* source and dest address */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IP_MAXPACKET 65535 /* maximum packet size */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for IP type of service (ip_tos)
|
||||||
|
*/
|
||||||
|
#define IPTOS_LOWDELAY 0x10
|
||||||
|
#define IPTOS_THROUGHPUT 0x08
|
||||||
|
#define IPTOS_RELIABILITY 0x04
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for IP precedence (also in ip_tos) (hopefully unused)
|
||||||
|
*/
|
||||||
|
#define IPTOS_PREC_NETCONTROL 0xe0
|
||||||
|
#define IPTOS_PREC_INTERNETCONTROL 0xc0
|
||||||
|
#define IPTOS_PREC_CRITIC_ECP 0xa0
|
||||||
|
#define IPTOS_PREC_FLASHOVERRIDE 0x80
|
||||||
|
#define IPTOS_PREC_FLASH 0x60
|
||||||
|
#define IPTOS_PREC_IMMEDIATE 0x40
|
||||||
|
#define IPTOS_PREC_PRIORITY 0x20
|
||||||
|
#define IPTOS_PREC_ROUTINE 0x00
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for options.
|
||||||
|
*/
|
||||||
|
#define IPOPT_COPIED(o) ((o)&0x80)
|
||||||
|
#define IPOPT_CLASS(o) ((o)&0x60)
|
||||||
|
#define IPOPT_NUMBER(o) ((o)&0x1f)
|
||||||
|
|
||||||
|
#define IPOPT_CONTROL 0x00
|
||||||
|
#define IPOPT_RESERVED1 0x20
|
||||||
|
#define IPOPT_DEBMEAS 0x40
|
||||||
|
#define IPOPT_RESERVED2 0x60
|
||||||
|
|
||||||
|
#define IPOPT_EOL 0 /* end of option list */
|
||||||
|
#define IPOPT_NOP 1 /* no operation */
|
||||||
|
|
||||||
|
#define IPOPT_RR 7 /* record packet route */
|
||||||
|
#define IPOPT_TS 68 /* timestamp */
|
||||||
|
#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
|
||||||
|
#define IPOPT_LSRR 131 /* loose source route */
|
||||||
|
#define IPOPT_SATID 136 /* satnet id */
|
||||||
|
#define IPOPT_SSRR 137 /* strict source route */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Offsets to fields in options other than EOL and NOP.
|
||||||
|
*/
|
||||||
|
#define IPOPT_OPTVAL 0 /* option ID */
|
||||||
|
#define IPOPT_OLEN 1 /* option length */
|
||||||
|
#define IPOPT_OFFSET 2 /* offset within option */
|
||||||
|
#define IPOPT_MINOFF 4 /* min value of above */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Time stamp option structure.
|
||||||
|
*/
|
||||||
|
struct ip_timestamp {
|
||||||
|
u_int8_t ipt_code; /* IPOPT_TS */
|
||||||
|
u_int8_t ipt_len; /* size of structure (variable) */
|
||||||
|
u_int8_t ipt_ptr; /* index of current entry */
|
||||||
|
u_int8_t ipt_oflwflg; /* flags, overflow counter */
|
||||||
|
#define IPTS_OFLW(ip) (((ipt)->ipt_oflwflg & 0xf0) >> 4)
|
||||||
|
#define IPTS_FLG(ip) ((ipt)->ipt_oflwflg & 0x0f)
|
||||||
|
union ipt_timestamp {
|
||||||
|
u_int32_t ipt_time[1];
|
||||||
|
struct ipt_ta {
|
||||||
|
struct in_addr ipt_addr;
|
||||||
|
u_int32_t ipt_time;
|
||||||
|
} ipt_ta[1];
|
||||||
|
} ipt_timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* flag bits for ipt_flg */
|
||||||
|
#define IPOPT_TS_TSONLY 0 /* timestamps only */
|
||||||
|
#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
|
||||||
|
#define IPOPT_TS_PRESPEC 3 /* specified modules only */
|
||||||
|
|
||||||
|
/* bits for security (not byte swapped) */
|
||||||
|
#define IPOPT_SECUR_UNCLASS 0x0000
|
||||||
|
#define IPOPT_SECUR_CONFID 0xf135
|
||||||
|
#define IPOPT_SECUR_EFTO 0x789a
|
||||||
|
#define IPOPT_SECUR_MMMM 0xbc4d
|
||||||
|
#define IPOPT_SECUR_RESTR 0xaf13
|
||||||
|
#define IPOPT_SECUR_SECRET 0xd788
|
||||||
|
#define IPOPT_SECUR_TOPSECRET 0x6bc5
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internet implementation parameters.
|
||||||
|
*/
|
||||||
|
#define MAXTTL 255 /* maximum time to live (seconds) */
|
||||||
|
#define IPDEFTTL 64 /* default ttl, from RFC 1340 */
|
||||||
|
#define IPFRAGTTL 60 /* time to live for frags, slowhz */
|
||||||
|
#define IPTTLDEC 1 /* subtracted when forwarding */
|
||||||
|
|
||||||
|
#define IP_MSS 576 /* default maximum segment size */
|
||||||
@@ -10,8 +10,9 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
|
||||||
#include "iftop.h"
|
#include "iftop.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
|||||||
80
tcp.h
Normal file
80
tcp.h
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
/* @(#) $Header$ (LBL) */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1982, 1986, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Berkeley and its contributors.
|
||||||
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)tcp.h 8.1 (Berkeley) 6/10/93
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef u_int32_t tcp_seq;
|
||||||
|
/*
|
||||||
|
* TCP header.
|
||||||
|
* Per RFC 793, September, 1981.
|
||||||
|
*/
|
||||||
|
struct tcphdr {
|
||||||
|
u_int16_t th_sport; /* source port */
|
||||||
|
u_int16_t th_dport; /* destination port */
|
||||||
|
tcp_seq th_seq; /* sequence number */
|
||||||
|
tcp_seq th_ack; /* acknowledgement number */
|
||||||
|
u_int8_t th_offx2; /* data offset, rsvd */
|
||||||
|
#define TH_OFF(th) (((th)->th_offx2 & 0xf0) >> 4)
|
||||||
|
u_int8_t th_flags;
|
||||||
|
#define TH_FIN 0x01
|
||||||
|
#define TH_SYN 0x02
|
||||||
|
#define TH_RST 0x04
|
||||||
|
#define TH_PUSH 0x08
|
||||||
|
#define TH_ACK 0x10
|
||||||
|
#define TH_URG 0x20
|
||||||
|
#define TH_ECNECHO 0x40 /* ECN Echo */
|
||||||
|
#define TH_CWR 0x80 /* ECN Cwnd Reduced */
|
||||||
|
u_int16_t th_win; /* window */
|
||||||
|
u_int16_t th_sum; /* checksum */
|
||||||
|
u_int16_t th_urp; /* urgent pointer */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TCPOPT_EOL 0
|
||||||
|
#define TCPOPT_NOP 1
|
||||||
|
#define TCPOPT_MAXSEG 2
|
||||||
|
#define TCPOLEN_MAXSEG 4
|
||||||
|
#define TCPOPT_WSCALE 3 /* window scale factor (rfc1323) */
|
||||||
|
#define TCPOPT_SACKOK 4 /* selective ack ok (rfc2018) */
|
||||||
|
#define TCPOPT_SACK 5 /* selective ack (rfc2018) */
|
||||||
|
#define TCPOPT_ECHO 6 /* echo (rfc1072) */
|
||||||
|
#define TCPOPT_ECHOREPLY 7 /* echo (rfc1072) */
|
||||||
|
#define TCPOPT_TIMESTAMP 8 /* timestamp (rfc1323) */
|
||||||
|
#define TCPOLEN_TIMESTAMP 10
|
||||||
|
#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */
|
||||||
|
#define TCPOPT_CC 11 /* T/TCP CC options (rfc1644) */
|
||||||
|
#define TCPOPT_CCNEW 12 /* T/TCP CC options (rfc1644) */
|
||||||
|
#define TCPOPT_CCECHO 13 /* T/TCP CC options (rfc1644) */
|
||||||
|
|
||||||
|
#define TCPOPT_TSTAMP_HDR \
|
||||||
|
(TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
|
||||||
Reference in New Issue
Block a user