복붙노트

[PYTHON] RegEx를 사용하여 Python에서 IP 주소 일치시키기

PYTHON

RegEx를 사용하여 Python에서 IP 주소 일치시키기

sys.argv 입력이 IP 주소의 RegEx와 일치하는지 확인하기위한 테스트를하려고합니다.

간단한 테스트로서, 나는 다음과 같은 것을 가지고있다.

import re

pat = re.compile("\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}")
test = pat.match(hostIP)
if test:
   print "Acceptable ip address"
else:
   print "Unacceptable ip address"

그러나 임의의 값을 전달할 때 대부분의 경우 "Acceptable IP address"를 반환하지만, 주소가 기본적으로 \ d +와 같은 경우는 예외입니다.

해결법

  1. ==============================

    1.정규 표현식을 다음과 같이 수정해야합니다.

    정규 표현식을 다음과 같이 수정해야합니다.

    pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
    

    그것은 왜냐하면 . "모든 문자"를 나타내는 와일드 카드입니다.

  2. ==============================

    2.regex를 사용하여 IP 주소의 유효성을 검사하는 것은 나쁜 생각입니다. 이는 999.999.999.999를 유효한 것으로 통과시킵니다. 대신 소켓을 사용하여이 접근법을 시도하십시오. 훨씬 더 나은 유효성 검사와 마찬가지로 쉽지만 쉽지는 않습니다.

    regex를 사용하여 IP 주소의 유효성을 검사하는 것은 나쁜 생각입니다. 이는 999.999.999.999를 유효한 것으로 통과시킵니다. 대신 소켓을 사용하여이 접근법을 시도하십시오. 훨씬 더 나은 유효성 검사와 마찬가지로 쉽지만 쉽지는 않습니다.

    import socket
    
    def valid_ip(address):
        try: 
            socket.inet_aton(address)
            return True
        except:
            return False
    
    print valid_ip('10.10.20.30')
    print valid_ip('999.10.20.30')
    print valid_ip('gibberish')
    

    대신 parse-the-host 접근법을 사용하려면이 코드가 정확하게 수행합니다.

    def valid_ip(address):
        try:
            host_bytes = address.split('.')
            valid = [int(b) for b in host_bytes]
            valid = [b for b in valid if b >= 0 and b<=255]
            return len(host_bytes) == 4 and len(valid) == 4
        except:
            return False
    
  3. ==============================

    3.ip v4를위한 정규식 :

    ip v4를위한 정규식 :

    ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
    

    그렇지 않으면 유효한 IP 주소가 999.999.999.999, 256.0.0.0 등이 아닙니다.

  4. ==============================

    4.같은 상황을 겪었습니다. 유용한 소켓 라이브러리를 사용하여 대답을 찾았지만 ipv6 주소를 지원하지 않습니다. 그것을위한 더 좋은 방법을 찾았습니다 :

    같은 상황을 겪었습니다. 유용한 소켓 라이브러리를 사용하여 대답을 찾았지만 ipv6 주소를 지원하지 않습니다. 그것을위한 더 좋은 방법을 찾았습니다 :

    불행히도 python3에서만 작동합니다.

    import ipaddress
    
    def valid_ip(address):
        try: 
            print ipaddress.ip_address(address)
            return True
        except:
            return False
    
    print valid_ip('10.10.20.30')
    print valid_ip('2001:DB8::1')
    print valid_ip('gibberish')
    
  5. ==============================

    5.당신은 사용하려고합니다. a. 어떤 캐릭터의 와일드 카드가 아닙니다. \를 사용하십시오. 대신 기간을 나타냅니다.

    당신은 사용하려고합니다. a. 어떤 캐릭터의 와일드 카드가 아닙니다. \를 사용하십시오. 대신 기간을 나타냅니다.

  6. ==============================

    6.

    def ipcheck():
    # 1.Validate the ip adderess
    input_ip = input('Enter the ip:')
    flag = 0
    
    pattern = "^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$"
    match = re.match(pattern, input_ip)
    if (match):
        field = input_ip.split(".")
        for i in range(0, len(field)):
            if (int(field[i]) < 256):
                flag += 1
            else:
                flag = 0
    if (flag == 4):
        print("valid ip")
    else:
        print('No match for ip or not a valid ip')
    
  7. ==============================

    7.

    import re
    ipv=raw_input("Enter an ip address")
    a=ipv.split('.')
    s=str(bin(int(a[0]))+bin(int(a[1]))+bin(int(a[2]))+bin(int(a[3])))
    s=s.replace("0b",".")
    m=re.search('\.[0,1]{1,8}\.[0,1]{1,8}\.[0,1]{1,8}\.[0,1]{1,8}$',s)
    if m is not None:
        print "Valid sequence of input"
    else :
        print "Invalid input sequence"
    

    단순하게 유지하기 위해이 방법을 사용했습니다. ipv4 주소가 실제로 평가되는 방법을 설명하는 간단한 설명. 이진수가 필수 사항은 아니지만 여부를 확인합니다. 희망이 당신이 좋아.

  8. ==============================

    8.IP 주소는 다음 인증을 사용합니다.

    IP 주소는 다음 인증을 사용합니다.

    의심스러운 점이 있으면 답장 해 주시겠습니까?

  9. ==============================

    9.

    import re
    
    st1 = 'This is my IP Address10.123.56.25 789.356.441.561 127 255 123.55 192.168.1.2.3 192.168.2.2 str1'
    

    여기서 유효한 IP 주소는 192.168.2.2이고 10.123.56.25는 유효하지 않습니다. 일부 문자열과 결합되어 192.168.1.2.3이 유효하지 않습니다.

    pat = r'\s(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\s|$))'
    
    match = re.search(pat,st1)
    
    print match.group()
    
    ================ RESTART: C:/Python27/Srujan/re_practice.py ================
    192.168.2.2 
    

    이것은 정확한 IP 주소를 grep 할 것이고, 우리는 IP 주소와 같은 어떤 모양을 무시할 수 있지만 유효한 것은 아닙니다. 예 : 'Address10.123.56.25', '789.356.441.561' '192.168.1.2.3'

    수정이 필요한 경우 의견을주십시오.

  10. ==============================

    10.파이썬 2.7에서 작동합니다 :

    파이썬 2.7에서 작동합니다 :

    import re
    a=raw_input("Enter a valid IP_Address:")
    b=("[0-9]+"+".")+"{3}"
    if re.match(b,a) and b<255:
        print "Valid"
    else:
        print "invalid"
    
  11. from https://stackoverflow.com/questions/11264005/using-a-regex-to-match-ip-addresses-in-python by cc-by-sa and MIT license