There's a pretty good rule to keep in mind here:-
Using only client sided validation never works.
https://stackoverflow.com/questions/3531968/why-is-client-side-validation-a-security-risk-as-opposed-to-server-side-validati
Therefore, if you ask only a client based software to check for authenticity of hosts, it will never work (with or without things like hash checks). We can discuss that in comments or the chat room. ;)
We therefore more onto concepts where authentication is handled at a remote server which is considered secure from the attacker.
Next up are Network Access Control (NAC) related solutions which are good for most applications but like almost everything is security can't give you a one-step solution.
They have the advantage of often not requiring client sided software installations.
Try PacketFence: http://www.packetfence.org/home.html
Most solutions wherein software can be installed on a client's computer involve giving users unique access credentials which are then verified for integrity on the server. Simultaneous use of one set of credentials is not permitted and is detected via two concurrent sessions by the same user ID by the session management module.
This works fine unless you want user access credentials tied to a PC. In that case, there is no definitive solution I know of. Administrators rely on things such as the user is not having the know-how to clone the OS image or to steal and then spoof the MAC.
By implementing multiple such checks and keeping logs along with that, potentially adventurous troublemakers can be caught as the learn how to circumvent the system.