Wireshark-users: Re: [Wireshark-users] find local IP from cap-file
From: Julian Fielding <
jfielding@xxxxxxxxxxxxxxx>
Date: Wed, 5 Aug 2009 20:27:35 +0100
Andrej van der Zee wrote on Wed, 5 Aug 2009 18:49:53 +0900
>Dear Sake,
>
>Thanks for your reply.
>
>
>> If I understand correctly, the tracefile is made on a system with
>> multiple interfaces and the traffic to and from this system is captured
>> (so no port mirroring is used to capture data from other systems).
>
>
>Yes that is right.
>
>
>>
>>
>> This would mean that every *unicast* packet must be to or from a local
>> interface. If you do some statistics on the src and dst mac-addresses
>> you will be able to tell which mac-addresses are always present. You
can
>> then check which IP addresses are used for these mac-addresses.
>
>
>I wrote a small pcap application that does this directly on the src and
dst
>IP addresses. The problem is that packages are send in both directions,
so I
>can't tell wich is the local IP that was used for sniffing. I am not sure
if
>doing this on the mac-address level, and then mapping the mac to the IP,
is
>going to help. Is it?
>
>Thank you,
>Andrej
If you find one MAC associated with many IPs it's probably a router. OK,
it could be a computer with multiple IPs or acting as a router while
simultaneously capturing, but it probably isn't. As a check, see if the
OUI resolves to a well-known router manufacturer. (Enable MAC name
resolution in Wireshark.)
I normally work with non-routed systems. I have this filter in a coloring
rule at the top of my list (highest priority), normally disabled:
frame.len<60||ip.checksum_bad==1||tcp.checksum_bad==1||udp.checksum_bad==1
Explanation: The filter looks for various anomalies that are possible in
packets transmitted by the capturing computer, but are unlikely to be seen
in received packets.
Impossibly short packets (frame.len<60) happen because the NIC pads short
outgoing packets. You might have to change "60" depending on the capturing
setup. For example, if Wireshark reports that most frames' Ethernet
headers include FCS then minimum size becomes 64.
TCP checksum offloading is so common that I usually disable checksum
checking in TCP preferences so reassembly works. (It must be enabled for
tcp.checksum_bad==1 to work)
The other bad_checksums don't seem to be common. I included them anyway -
they cost nothing except (I guess) a few more ms per frame.
I expect you're using tshark, so you could use the filter:
-R"frame.len<60||ip.checksum_bad==1||tcp.checksum_bad==1||udp.checksum_bad==1"
and maybe -T fields -e eth.src -e ip.src.
BTW, don't trust switches' handling of unicast destinations unreservedly.
If you try this capture filter
not (multicast or ether host <your_mac_address>)
(in promiscuous mode of course) for some time on a big switched network
you will probably capture some packets. There are several possible causes,
such as:
- Switch mac table overflow.
- Destination has failed and source's arp cache timeout is longer than
switch's mac aging time.
- Weird network configuration (probably mistake) makes packets from A->B
follow a different path from B->A.
So your file might include some unicast packets not to or from the
capturing PC.
Julian.