Our work studies network neutrality, a property of communication networks which means that they treat all traffic the same, regardless of application, content provider or communication protocol. This is an important problem, because sometimes users suspect their ISPs of violating network neutrality, but apply inaccurate methods to check their suspicions, reaching incorrect conclusions. Prior non-neutrality detection methods either provide only detection, but lack localization capabilities; or also perform localization, but assume perfect measurements. For the latter, we show that, in practice, the measurement process can severely impact the results. We present a method that performs both non-neutrality detection and localization, using only end-to-end measurements, and assuming an imperfect measurement process. We identify the sources of measurement error that may affect our method, we address them, and evaluate the method extensively with simulations, emulations and experiments on the Internet. We also use our method in two studies, investigating suspicions that a set of ISPs prioritize speed-test traffic, or differentiate against BitTorrent traffic; despite circumstancial evidence that they do, we obtain reliable evidence to the contrary. Finally, we present the network emulator that we built to evaluate our method, hoping that it will be a useful tool in future research. We conclude that it is feasible to detect and localize network neutrality violations based solely on end-to-end measurements, without assuming a perfect measurement process; and that it is important that reasoning about network neutrality is based on reliable evidence of network behavior.