This is a "real sort". It's called Lexicographical order and is exactly what you find in a dictionary.
You would not expect "Aa" to come before "A", and since you store the IP as text, you should not expect 100 to come before 10. But since you shouldn't reasonably expect that if you compared numbers either, I fail to see your point.
Moreover, since '.' comes before '0', '17.' would come before '170.', so everything still seems fine to me.
Apart from that, + is not a string concatenation operator in MySQL. For that, you'd need to use CONCAT(start, end). Casting an ip address string to a long integer is possible (e.g. ip2long in php), but even if this is done, adding 0 to it won't make the result any different. 1+0 is always less than 10+0, for the same reason that 1 is less than 10. And I doubt MySQL automatically performs an ip2long casting, but I may be wrong.
So, what do you consider a "real sort"? How are you not happy with the result you showed above?