IP Scanner via python sockets
Starting with Python 3.3, there is a standard ipaddress module.  Avoid reinventing-the-wheel.

Your IpAddr class is cumbersome because you store the four dotted-quad components separately.  It would be easier to represent it internally as a 32-bit integer, and convert it from/to dotted-quad notation in the constructor and the __str__ method.  For those conversions, you may find struct.pack() and struct.unpack() useful.

I would expect IpAddr objects to be immutable; the .next() method should return a new object instead of mutating the original one.

When scanning a range of IP addresses, watch out for network and broadcast addresses.  Opening a connection on a broadcast address would be inappropriate.

The find function is poorly named, and its parameters z and i are cryptic.  In fact, your variable names are generally horrible — what do p, q, n, and d mean?

Using a global cnt variable is inappropriate — especially since you access it in threads without any mutex.  But why even bother, if it's just a write-only variable whose value never matters?