No, you cannot, there are many ways to do this.
Many answers here will tell you how to check for specific MITM attacks, which I believe is not the point.
A MITM doesn't mean the attacker will try to decipher your data stream and present you with a different key/fingerprint. He is just a node between you and your destination host.
There are many ways to get into a MITM situation, each can be prevented by proper network administration, all the nodes between you and your destination host should be secured. Each network should be designed to resist to every MITM possible, including abusing routing protocols, ARP spoofing, DNS spoofing, simply installing a physical bridge, etc.
In order to achieve security, being caught in a MITM attack should not matter, you cannot rely on trust and luck and you cannot control the internet, you have to assume you are on a hostile environment unless proven secure by a proper audit.
Using secure protocols like TLS, SSH and potentially IPSec, can make your network more secure, authenticate and crypt your data. However it's always vulnerable at some point and most of the time it comes from either a misconfiguration or a flaw in the protocol/implementation itself.
In short, don't detect MITM, but instead:
- Secure your LAN or ask someone to do it
- Set up secure tunneling protocols to access secure distant networks and systems
Detecting MITM is possible but it's related to what you use, port security for CISCO IOS or just using SNORT on any Unix box. You can't possibly get an exhaustive list, it just match a given situation and besides, attackers are always creative enough to find something you didn't think about, so refer to my 2 above advices.