In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] wrote: > Hello, > is there any common function for validation if string contains valid ip > address(both ipv4 and ipv6)? Or does sb wrote some regular expression > for this? > thanks > J
Look at socket.inet_pton(). First check to make sure ipv6 is supported on your platform, then pass your string to inet_pton() inside of a try block to catch socket.error. It would have been nicer is a more specific exception was thrown, but this seems to work. For example: >>> socket.has_ipv6 True >>> socket.inet_pton(socket.AF_INET6, "8001::1244") '\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12D' >>> socket.inet_pton(socket.AF_INET6, "8001:xyz:1244") Traceback (most recent call last): File "<stdin>", line 1, in ? socket.error: illegal IP address string passed to inet_pton >>> Be aware that IPv6 support is messy on Windows. For example, if you're running Win 2003 (or XP, I would guess), the OS does support IPv6 (and thus socket.has_ipv6 will probably bet set to True) but the IPv6 libraries don't actually get loaded until you configure an IPv6 address on some interface. This means things like inet_pton() will fail, which is truly bletcherous and evil. Writing a regex to recognize valid IPv6 presentation strings is not trivial. Keep in mind that you're allowed exactly 0 or 1 "::" occurrances, and things like "ffff::192.168.11.1" are legal (I don't remember if I got the semantics right there, but the syntax is legal). -- http://mail.python.org/mailman/listinfo/python-list