forked from osmocom/wireshark
Giles Scott: Add Wlan tap
svn path=/trunk/; revision=12799
This commit is contained in:
parent
6b2d41a3fe
commit
773681fca3
1
AUTHORS
1
AUTHORS
|
@ -1912,6 +1912,7 @@ Giles Scott <gscott [AT] arubanetworks.com> {
|
|||
Alteon/Nortel Transparent Proxy Control Protocol support
|
||||
Ethernet MAC Control Frame support
|
||||
Port weak key detection from Airsnort
|
||||
Wlan tap
|
||||
}
|
||||
|
||||
Vincent Jardin <vincent.jardin [AT] 6wind.com> {
|
||||
|
|
|
@ -68,6 +68,7 @@
|
|||
#include "packet-ieee80211.h"
|
||||
#include "etypes.h"
|
||||
#include <epan/crc32.h>
|
||||
#include <epan/tap.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include "isprint.h"
|
||||
|
@ -512,6 +513,8 @@ static dissector_handle_t ipx_handle;
|
|||
static dissector_handle_t eth_withoutfcs_handle;
|
||||
static dissector_handle_t data_handle;
|
||||
|
||||
static int wlan_tap = -1;
|
||||
|
||||
/* ************************************************************************* */
|
||||
/* Return the length of the current header (in bytes) */
|
||||
/* ************************************************************************* */
|
||||
|
@ -1684,6 +1687,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
|
|||
char out_buff[SHORT_STR];
|
||||
gint is_iv_bad;
|
||||
guchar iv_buff[4];
|
||||
wlan_hdr *whdr;
|
||||
static wlan_hdr whdrs[4];
|
||||
|
||||
whdr= &whdrs[0];
|
||||
|
||||
if (check_col (pinfo->cinfo, COL_PROTOCOL))
|
||||
col_set_str (pinfo->cinfo, COL_PROTOCOL, "IEEE 802.11");
|
||||
|
@ -1843,6 +1850,11 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
|
|||
SET_ADDRESS(&pinfo->dl_dst, AT_ETHER, 6, dst);
|
||||
SET_ADDRESS(&pinfo->dst, AT_ETHER, 6, dst);
|
||||
|
||||
/* for tap */
|
||||
SET_ADDRESS(&whdr->bssid, AT_ETHER, 6, tvb_get_ptr(tvb, 16,6));
|
||||
SET_ADDRESS(&whdr->src, AT_ETHER, 6, src);
|
||||
SET_ADDRESS(&whdr->dst, AT_ETHER, 6, dst);
|
||||
|
||||
seq_control = tvb_get_letohs(tvb, 22);
|
||||
frag_number = COOK_FRAGMENT_NUMBER(seq_control);
|
||||
seq_number = COOK_SEQUENCE_NUMBER(seq_control);
|
||||
|
@ -1992,6 +2004,12 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
|
|||
SET_ADDRESS(&pinfo->dl_dst, AT_ETHER, 6, dst);
|
||||
SET_ADDRESS(&pinfo->dst, AT_ETHER, 6, dst);
|
||||
|
||||
/* for tap */
|
||||
|
||||
SET_ADDRESS(&whdr->bssid, AT_ETHER, 6, tvb_get_ptr(tvb, 16,6));
|
||||
SET_ADDRESS(&whdr->src, AT_ETHER, 6, src);
|
||||
SET_ADDRESS(&whdr->dst, AT_ETHER, 6, dst);
|
||||
|
||||
seq_control = tvb_get_letohs(tvb, 22);
|
||||
frag_number = COOK_FRAGMENT_NUMBER(seq_control);
|
||||
seq_number = COOK_SEQUENCE_NUMBER(seq_control);
|
||||
|
@ -2342,7 +2360,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
|
|||
{
|
||||
/* Some wireless drivers (such as Centrino) WEP payload already decrypted */
|
||||
call_dissector(data_handle, next_tvb, pinfo, tree);
|
||||
return;
|
||||
goto end_of_wlan;
|
||||
}
|
||||
} else {
|
||||
|
||||
|
@ -2450,7 +2468,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
|
|||
next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
|
||||
call_dissector(data_handle, next_tvb, pinfo, tree);
|
||||
pinfo->fragmented = save_fragmented;
|
||||
return;
|
||||
goto end_of_wlan;
|
||||
}
|
||||
|
||||
switch (COOK_FRAME_TYPE (fcf))
|
||||
|
@ -2523,6 +2541,9 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
|
|||
break;
|
||||
}
|
||||
pinfo->fragmented = save_fragmented;
|
||||
|
||||
end_of_wlan:
|
||||
tap_queue_packet(wlan_tap, pinfo, whdr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3198,6 +3219,8 @@ proto_register_ieee80211 (void)
|
|||
register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
|
||||
register_init_routine(wlan_defragment_init);
|
||||
|
||||
wlan_tap = register_tap("wlan");
|
||||
|
||||
/* Register configuration options */
|
||||
wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
|
||||
prefs_register_bool_preference(wlan_module, "defragment",
|
||||
|
|
|
@ -32,3 +32,10 @@ void capture_ieee80211_fixed (const guchar *, int, int, packet_counts *);
|
|||
|
||||
void ieee_80211_add_tagged_parameters (tvbuff_t * tvb, int offset,
|
||||
packet_info * pinfo, proto_tree * tree, int tagged_parameters_len);
|
||||
|
||||
typedef struct _wlan_hdr {
|
||||
address bssid;
|
||||
address src;
|
||||
address dst;
|
||||
guint16 type;
|
||||
} wlan_hdr;
|
||||
|
|
|
@ -99,6 +99,7 @@ ETHEREAL_TAP_SRC = \
|
|||
conversations_tcpip.c \
|
||||
conversations_tr.c \
|
||||
conversations_udpip.c \
|
||||
conversations_wlan.c \
|
||||
dcerpc_stat.c \
|
||||
fc_stat.c \
|
||||
gsm_a_stat.c \
|
||||
|
@ -115,6 +116,7 @@ ETHEREAL_TAP_SRC = \
|
|||
hostlist_tcpip.c \
|
||||
hostlist_tr.c \
|
||||
hostlist_udpip.c \
|
||||
hostlist_wlan.c \
|
||||
http_stat.c \
|
||||
io_stat.c \
|
||||
isup_stat.c \
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
/* conversations_wlan.c 2004 Giles Scott
|
||||
* conversations_eth 2003 Ronnie Sahlberg
|
||||
*
|
||||
* $Id $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
* Copyright 1998 Gerald Combs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <string.h>
|
||||
#include "epan/packet.h"
|
||||
#include "tap_menu.h"
|
||||
#include <epan/tap.h>
|
||||
#include "../register.h"
|
||||
#include "conversations_table.h"
|
||||
#include <epan/dissectors/packet-ieee80211.h>
|
||||
|
||||
|
||||
static int
|
||||
wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U_, void *vip)
|
||||
{
|
||||
wlan_hdr *whdr=vip;
|
||||
|
||||
add_conversation_table_data((conversations_table *)pct, &whdr->src, &whdr->dst, 0, 0, 1, pinfo->fd->pkt_len, SAT_ETHER, PT_NONE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
wlan_conversation_init(char *optarg)
|
||||
{
|
||||
char *filter=NULL;
|
||||
|
||||
if(!strncmp(optarg,"conv,wlan,",10)){
|
||||
filter=optarg+10;
|
||||
} else {
|
||||
filter=NULL;
|
||||
}
|
||||
|
||||
init_conversation_table(TRUE, "WLAN", "wlan", filter, (void *)wlan_conversation_packet);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
wlan_endpoints_cb(GtkWidget *w _U_, gpointer d _U_)
|
||||
{
|
||||
wlan_conversation_init("conv,wlan");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
register_tap_listener_wlan_conversation(void)
|
||||
{
|
||||
register_ethereal_tap("conv,wlan", wlan_conversation_init);
|
||||
|
||||
register_tap_menu_item("WLAN", REGISTER_TAP_GROUP_CONVERSATION_LIST,
|
||||
wlan_endpoints_cb, NULL, NULL, NULL);
|
||||
|
||||
register_conversation_table(TRUE, "WLAN", "wlan", NULL /*filter*/, (void *)wlan_conversation_packet);
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
/* hostlist_wlan.c 2004 Giles Scott
|
||||
* modified from endpoint_talkers_eth.c 2003 Ronnie Sahlberg
|
||||
*
|
||||
* $Id $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
* Copyright 1998 Gerald Combs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <string.h>
|
||||
#include "epan/packet.h"
|
||||
#include "tap_menu.h"
|
||||
#include <epan/tap.h>
|
||||
#include "../register.h"
|
||||
#include "hostlist_table.h"
|
||||
#include <epan/dissectors/packet-ieee80211.h>
|
||||
|
||||
|
||||
static int
|
||||
wlan_hostlist_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U_, void *vip)
|
||||
{
|
||||
hostlist_table *hosts=(hostlist_table *)pit;
|
||||
wlan_hdr *whdr=vip;
|
||||
|
||||
/* Take two "add" passes per packet, adding for each direction, ensures that all
|
||||
packets are counted properly (even if address is sending to itself)
|
||||
XXX - this could probably be done more efficiently inside hostlist_table */
|
||||
add_hostlist_table_data(hosts, &whdr->src, 0, TRUE, 1, pinfo->fd->pkt_len, SAT_ETHER, PT_NONE);
|
||||
add_hostlist_table_data(hosts, &whdr->dst, 0, FALSE, 1, pinfo->fd->pkt_len, SAT_ETHER, PT_NONE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_wlan_hostlist_init(char *optarg)
|
||||
{
|
||||
char *filter=NULL;
|
||||
|
||||
if(!strncmp(optarg,"hosts,wlan,",11)){
|
||||
filter=optarg+11;
|
||||
} else {
|
||||
filter=NULL;
|
||||
}
|
||||
|
||||
init_hostlist_table(TRUE, "Wlan Hosts", "wlan", filter, (void *)wlan_hostlist_packet);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gtk_wlan_hostlist_cb(GtkWidget *w _U_, gpointer d _U_)
|
||||
{
|
||||
gtk_wlan_hostlist_init("hosts,wlan");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
register_tap_listener_wlan_hostlist(void)
|
||||
{
|
||||
register_ethereal_tap("hosts,wlan", gtk_wlan_hostlist_init);
|
||||
|
||||
register_tap_menu_item("Wlan", REGISTER_TAP_GROUP_ENDPOINT_LIST,
|
||||
gtk_wlan_hostlist_cb, NULL, NULL, NULL);
|
||||
|
||||
register_hostlist_table(TRUE, "WLAN", "wlan", NULL /*filter*/, (void *)wlan_hostlist_packet);
|
||||
}
|
Loading…
Reference in New Issue