4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
#ifdef HAVE_LIBNCURSES
27
int add(u_long ip_src,u_long ip_dst,u_short sport,u_short dport);
28
int del(u_long ip_src,u_long ip_dst,u_short sport,u_short dport, int flag);
36
int connection(char *dev,u_long ip_src,u_long ip_dst,u_short sport,u_short dport)
39
struct libnet_ipv4_hdr *ip;
40
struct libnet_tcp_hdr *tcp;
42
pcap_dumper_t *dumper;
53
if((descr=pcap_open_live(dev,BUFSIZ,1,0,errbuf)) == NULL)
55
w_error(1, "pcap_open_live: %s", errbuf);
58
/* create dumper for log the datas */
59
if ((dumper = pcap_dump_open(descr,tcpdl))==NULL)
61
w_error(1, "pcap_open_live() error: %s\n\n",errbuf);
64
offset=(device(dev,descr));
68
memset(&c_inf[k], 0, sizeof(c_inf[k]));
69
memset(&sf[k].string, 0, sizeof(sf[k].string));
70
memset(&sf[k].sfilter, 0, sizeof(sf[k].sfilter));
75
mvwprintw(winfo->win,0,2,"Source");
76
mvwprintw(winfo->win,0,21,"Port");
77
mvwprintw(winfo->win,0,34,"Destination");
78
mvwprintw(winfo->win,0,55,"Port");
79
mvwprintw(winfo->win,0,66,"State");
80
SAFE_SCROLL_REFRESH(winfo);
85
if ((packet = (u_char *) pcap_next (descr, &hdr))!=NULL)
87
fflush((FILE *)dumper);
88
pcap_dump((u_char *)dumper,&hdr,packet);
90
ip = (struct libnet_ipv4_hdr *) (packet + offset);
91
tcp = (struct libnet_tcp_hdr *) (packet + offset + LIBNET_IPV4_H);
93
if (ip->ip_p == IPPROTO_TCP)
97
if ( ip->ip_src.s_addr == ip_src && ip->ip_dst.s_addr == ip_dst)
102
add(ip_src,ip_dst,htons(tcp->th_sport),htons(tcp->th_dport));
107
del(ip_src,ip_dst,htons(tcp->th_sport),htons(tcp->th_dport),Rst);
109
case (TH_ACK|TH_PUSH):
111
case (TH_URG|TH_ACK):
113
case (TH_FIN|TH_ACK):
114
del(ip_src,ip_dst,htons(tcp->th_sport),htons(tcp->th_dport),Fin);
115
case (TH_RST|TH_ACK):
116
del(ip_src,ip_dst,htons(tcp->th_sport),htons(tcp->th_dport),Rst);
124
else if ( ip->ip_src.s_addr == ip_dst && ip->ip_dst.s_addr == ip_src )
126
switch(tcp->th_flags)
129
add(ip_dst,ip_src,htons(tcp->th_sport),htons(tcp->th_dport));
134
del(ip_dst,ip_src,htons(tcp->th_sport),htons(tcp->th_dport),Rst);
136
case (TH_ACK|TH_PUSH):
138
case (TH_URG|TH_ACK):
140
case (TH_FIN|TH_ACK):
141
del(ip_dst,ip_src,htons(tcp->th_sport),htons(tcp->th_dport),Fin);
142
case (TH_RST|TH_ACK):
143
del(ip_dst,ip_src,htons(tcp->th_sport),htons(tcp->th_dport),Rst);
158
pcap_dump_close(dumper);
163
int add(u_long ip_src,u_long ip_dst,u_short sport,u_short dport)
167
if((ip_src==c_inf[i].s_ip && ip_dst==c_inf[i].d_ip && sport==c_inf[i].s_port && dport==c_inf[i].d_port) || (ip_src==c_inf[i].d_ip && ip_dst==c_inf[i].s_ip && sport==c_inf[i].d_port && dport==c_inf[i].s_port))
168
return(0); /*ce l'ho gi� (duplicato)*/
170
for(i=0;i<30;i++)/*cerco spazio vuoto*/
172
if(c_inf[i].s_ip)continue;
175
c_inf[i].s_ip = ip_src;
176
c_inf[i].d_ip = ip_dst;
177
c_inf[i].s_port = sport;
178
c_inf[i].d_port = dport;
180
mvwprintw(winfo->win,lines,2,"%s",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE));
181
mvwprintw(winfo->win,lines,21,"%d",c_inf[i].s_port);
182
mvwprintw(winfo->win,lines,34,"%s",libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE));
183
mvwprintw(winfo->win,lines,55,"%d",c_inf[i].d_port);
184
mvwprintw(winfo->win,lines,66,"Open");
185
SAFE_SCROLL_REFRESH(winfo);
187
sprintf(sf[z].string, "%2s%12d%20s%12d Open",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
188
/* create the filter for tcp stream*/
189
sprintf(sf[z].sfilter,"host %s and port %d and host %s and port %d",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
205
int del(u_long ip_src,u_long ip_dst,u_short sport,u_short dport, int flag)
211
if(ip_src==c_inf[i].s_ip && ip_dst==c_inf[i].d_ip && sport==c_inf[i].s_port && dport==c_inf[i].d_port)
213
mvwprintw(winfo->win,c_inf[i].lin,2,"%s",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE));
214
mvwprintw(winfo->win,c_inf[i].lin,21,"%d",c_inf[i].s_port);
215
mvwprintw(winfo->win,c_inf[i].lin,34,"%s",libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE));
216
mvwprintw(winfo->win,c_inf[i].lin,55,"%d",c_inf[i].d_port);
217
mvwprintw(winfo->win,c_inf[i].lin,66,"Closed");
219
sprintf(sf[sf[i].cont].string,"%2s%12d%20s%14d Closed",
220
libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
224
mvwprintw(winfo->win,c_inf[i].lin,2,"%s",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE));
225
mvwprintw(winfo->win,c_inf[i].lin,21,"%d",c_inf[i].s_port);
226
mvwprintw(winfo->win,c_inf[i].lin,34,"%s",libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE));
227
mvwprintw(winfo->win,c_inf[i].lin,55,"%d",c_inf[i].d_port);
228
mvwprintw(winfo->win,c_inf[i].lin,66,"Resetted");
230
sprintf(sf[sf[i].cont].string, "%2s%12d%20s%13d Resetted",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
232
sprintf(sf[sf[i].cont].sfilter,"host %s and port %d and host %s and port %d",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
233
SAFE_SCROLL_REFRESH(winfo);
234
//wrefresh(winfo->win);
235
memset(&c_inf[i], 0, sizeof(c_inf[i]));
239
else if(ip_src==c_inf[i].d_ip && ip_dst==c_inf[i].s_ip && sport==c_inf[i].d_port && dport==c_inf[i].s_port)
241
mvwprintw(winfo->win,c_inf[i].lin,2,"%s",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE));
242
mvwprintw(winfo->win,c_inf[i].lin,21,"%d",c_inf[i].s_port);
243
mvwprintw(winfo->win,c_inf[i].lin,34,"%s",libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE));
244
mvwprintw(winfo->win,c_inf[i].lin,55,"%d",c_inf[i].d_port);
245
mvwprintw(winfo->win,c_inf[i].lin,66,"Closed");
247
sprintf(sf[sf[i].cont].string, "%2s%12d%20s%14d Closed",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
251
mvwprintw(winfo->win,c_inf[i].lin,2,"%s",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE));
252
mvwprintw(winfo->win,c_inf[i].lin,21,"%d",c_inf[i].s_port);
253
mvwprintw(winfo->win,c_inf[i].lin,34,"%s",libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE));
254
mvwprintw(winfo->win,c_inf[i].lin,55,"%d",c_inf[i].d_port);
255
mvwprintw(winfo->win,c_inf[i].lin,66,"Resetted");
257
sprintf(sf[sf[i].cont].string, "%2s%12d%20s%13d Resetted",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
259
sprintf(sf[sf[i].cont].sfilter,"host %s and port %d and host %s and port %d",libnet_addr2name4(c_inf[i].s_ip, LIBNET_DONT_RESOLVE),c_inf[i].s_port,libnet_addr2name4(c_inf[i].d_ip, LIBNET_DONT_RESOLVE),c_inf[i].d_port);
260
SAFE_SCROLL_REFRESH(winfo);
261
memset(&c_inf[i], 0, sizeof(c_inf[i]));