Cách lấy địa chỉ IP làm đầu vào trong Python

Chúng ta sẽ sử dụng lập trình trong bài học này để cố gắng giải câu đố Get Public Ip Address bằng Python. Điều này được thể hiện bằng đoạn mã sau

from requests import get

ip = get['//api.ipify.org'].text
print[f'My public IP address is: {ip}']

Dưới đây là danh sách các cách tiếp cận khác nhau có thể được thực hiện để giải quyết vấn đề Python Get Public Ip Address

# This example requires the requests library be installed.  You can learn more
# about the Requests library here: //docs.python-requests.org/en/latest/

from requests import get

ip = get['//api.ipify.org'].text
print 'My public IP address is:', ip

Với rất nhiều ví dụ, chúng ta đã thấy cách giải quyết vấn đề Python Get Public Ip Address

Làm cách nào để tìm địa chỉ IP công cộng của tôi trong Python?

Nhận địa chỉ IP công cộng bằng Python

  • nhập ổ cắm host_name = ổ cắm. gethostname[] IP_address = ổ cắm
  • nhập ổ cắm IP_address = ổ cắm. gethostbyname["google. com"] print[IP_address] #Output. 172. 217
  • nhập ổ cắm host_name = ổ cắm. gethostname[] IP_address = ổ cắm
  • nhập ổ cắm IP_address = ổ cắm

Làm cách nào để bạn kiểm tra IP là công khai hay riêng tư trong Python?

netaddr là một thư viện Python để biểu diễn và thao tác các địa chỉ mạng. Địa chỉ IP ['ip đầu vào']. is_private[] sẽ trả về true nếu địa chỉ ip đầu vào là private, ngược lại nó sẽ trả về false. 12-Feb-2015

Làm cách nào để tìm nguồn công khai của địa chỉ IP?

Để kiểm tra xem địa chỉ IP của bạn có công khai hay không, bạn có thể sử dụng myip. com [hoặc bất kỳ dịch vụ nào tương tự]. Bạn sẽ được hiển thị địa chỉ IP đã được sử dụng để truy cập trang web; . 13-Apr-2022

Làm cách nào để tìm địa chỉ IP trong một tệp bằng Python?

Hãy cho chúng tôi xem cách trích xuất địa chỉ IP từ một tệp bằng Python. thuật toán

  • Nhập mô-đun lại cho biểu thức chính quy
  • Mở tệp bằng hàm open[]
  • Đọc tất cả các dòng trong tệp và lưu trữ chúng trong danh sách
  • Khai báo mẫu cho địa chỉ IP. Mẫu regex là

Làm cách nào để có được vị trí hiện tại trong Python?

Cách tiếp cận

  • Nhập mô-đun
  • Công cụ chỉ định cuộc gọi
  • Vượt qua vĩ độ và kinh độ để đảo ngược[]
  • In tên địa điểm

Làm cách nào để bạn theo dõi vị trí của ai đó bằng Python?

Cách theo dõi vị trí số điện thoại bằng Python

  • Nhấp chuột phải vào tên dự án. Nhấp chuột phải vào tên dự án
  • Đặt tên cho tệp Python
  • Đi đến Nhà ga
  • Viết trong cơ thể. py
  • Tạo một tệp Python khác
  • Viết trong văn bản. py
  • bấm vào cơ thể. py
  • Lấy lịch sử của số điện thoại từ quốc gia của nó bằng cách phân tích hai tham số

Làm cách nào để kiểm tra xem IP có trong mạng bằng Python không?

sử dụng ipaddress. địa chỉ ip[] và địa chỉ ip. ip_network[] để kiểm tra xem địa chỉ IP có trong mạng không

  • một địa chỉ = địa chỉ ip. địa chỉ ip['192. 168. 0. 1']
  • một mạng = địa chỉ ip. ip_mạng['192. 168. 0. 0/24']
  • address_in_network = an_address trong a_network
  • in[địa chỉ_trong_mạng]

Làm cách nào để kiểm tra xem địa chỉ IP có thể truy cập được bằng Python không?

python kiểm tra xem ip tăng hay giảm

  • nhập nmap, ổ cắm
  • ip_addr = input['Nhập ip hoặc url để kiểm tra xem up hay down. ']
  • máy quét = nmap. Máy quét cổng[]
  • máy chủ = ổ cắm. gethostbyname[ip_addr]
  • máy quét. quét [máy chủ, '1', '-v']
  • print["Trạng thái IP. ", máy quét[máy chủ]. tiểu bang[]]

Địa chỉ IP trong Python là gì?

IP [Giao thức Internet] -Địa chỉ là khái niệm cơ bản cơ bản của mạng máy tính cung cấp khả năng gán địa chỉ cho mạng. Python cung cấp mô-đun ipaddress được sử dụng để xác thực và phân loại địa chỉ IP theo loại của chúng [IPv4 hoặc IPv6]. 18-Aug-2021

là 192. 168 một IP công cộng?

Và đừng ngạc nhiên nếu bạn có một hoặc hai thiết bị ở nhà với cái gọi là địa chỉ IP 192 hoặc địa chỉ IP riêng bắt đầu bằng 192. 168. Đây là định dạng địa chỉ IP riêng mặc định phổ biến nhất được gán cho các bộ định tuyến mạng trên toàn cầu. 22-Apr-2021

Trong chương trình Python của bạn, bạn có thể muốn xác thực địa chỉ IP. Đây có thể là một yêu cầu nếu bạn viết các chương trình cấp hệ điều hành và không chỉ

Để xác thực địa chỉ IP bằng Python, bạn có thể sử dụng hàm ip_address[] của mô-đun ipaddress. Điều này hoạt động cho cả địa chỉ IPv4 và IPv6. Bạn cũng có thể xác thực địa chỉ IP bằng cách sử dụng hàm tùy chỉnh hoặc biểu thức chính quy để xác minh bộ số mà địa chỉ IP được tạo từ

Bắt đầu xác thực

Mục lục

  • Làm cách nào để xác thực địa chỉ IP trong Python?
  • Xác thực địa chỉ IP bằng chức năng tùy chỉnh
  • Xác thực địa chỉ IP bằng Regex
  • Cách kiểm tra xem IP thuộc loại IPv4 hay IPv6 bằng Python
  • Cách kiểm tra xem một địa chỉ IP có nằm trong một mạng con nhất định hay không
  • Chuyển đổi địa chỉ IP sang các định dạng khác để xác thực
  • Sự kết luận

Làm cách nào để xác thực địa chỉ IP trong Python?

Cách đơn giản nhất để xác thực nếu một chuỗi đại diện cho một địa chỉ IP là sử dụng mô-đun ipaddress Python

Hãy mở trình bao Python và xem ipaddress là gì. Hàm ip_address[] trả về khi chúng ta chuyển đến nó các chuỗi biểu thị địa chỉ IPv4 hợp lệ và không hợp lệ

Cái hợp lệ đầu tiên…

>>> ipaddress.ip_address["10.10.10.10"]
IPv4Address['10.10.10.10'] 

Hàm ip_address[] trả về một đối tượng thuộc loại IPv4Address, điều này có nghĩa là nó có thể dịch chuỗi thành địa chỉ IP hợp lệ

Bây giờ, hãy thử với một IP không hợp lệ…

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 

Lần này, hàm ip_address[] đưa ra một ngoại lệ ValueError vì chuỗi chúng tôi đã truyền không đại diện cho một địa chỉ IP hợp lệ

Chúng ta có thể xây dựng một hàm đơn giản cho biết địa chỉ IP có hợp lệ hay không tùy thuộc vào thực tế là một ngoại lệ ValueError được đưa ra bởi ipaddress. ip_address[] cho các IP không hợp lệ

import ipaddress 

def validate_ip_address[address]:
    try:
        ip = ipaddress.ip_address[address]
        print["IP address {} is valid. The object returned is {}".format[address, ip]]
    except ValueError:
        print["IP address {} is not valid".format[address]] 

Lưu ý cách chúng ta sử dụng phương thức string format[] để tạo thông báo thành công và thất bại

Chuyển một vài địa chỉ IP cho chức năng này để xác nhận xem nó có hoạt động tốt không

validate_ip_address["10.10.10.10"]
validate_ip_address["10.10.10.01"]
validate_ip_address["10.10.10.300"]
validate_ip_address["10.260.10.300"]
validate_ip_address["192.168.1.20"]

[output]
IP address 10.10.10.10 is valid. The object returned is 10.10.10.10
IP address 10.10.10.01 is valid. The object returned is 10.10.10.1
IP address 10.10.10.300 is not valid
IP address 10.260.10.300 is not valid
IP address 192.168.1.20 is valid. The object returned is 192.168.1.20 

Chức năng này hoạt động tốt, cũng lưu ý rằng trong thử nghiệm thứ hai từ chuỗi “10. 10. 10. 01”, chúng tôi lấy lại một đối tượng cho “10. 10. 10. 1”

Mô-đun loại bỏ số 0 đứng đầu trong phần thứ tư của địa chỉ IP

Ghi chú. bạn cũng có thể cập nhật hàm validate_ip_address[] để trả về True cho IP hợp lệ và Sai cho IP không hợp lệ thay vì in thông báo

Xác thực địa chỉ IP bằng chức năng tùy chỉnh

Hãy thực hành một chút về Python và xem cách chúng ta viết logic xác minh địa chỉ IPv4 mà không cần sử dụng mô-đun ipaddress

Địa chỉ IPv4 có định dạng sau

a.b.c.d

Trong đó a, b, c, d là bốn số từ 0 đến 255. Chúng tôi có thể sử dụng thông số kỹ thuật này để viết logic tùy chỉnh của mình

def validate_ip_address[address]:
    parts = address.split["."]

    if len[parts] != 4:
        print["IP address {} is not valid".format[address]]
        return False

    for part in parts:
        if not isinstance[int[part], int]:
            print["IP address {} is not valid".format[address]]
            return False

        if int[part] < 0 or int[part] > 255:
            print["IP address {} is not valid".format[address]]
            return False
 
    print["IP address {} is valid".format[address]]
    return True 

Trong chức năng này, chúng tôi trải qua các bước sau

  • Tách địa chỉ dựa trên ký tự dấu chấm và lưu trữ từng phần của địa chỉ IP thành một danh sách các chuỗi
  • Xác minh rằng chuỗi IP được tạo thành từ 4 số được phân tách bằng dấu chấm [sử dụng hàm len[]]
  • Đối với mỗi số trong chuỗi IP, hãy kiểm tra bên dưới
    • Xác minh rằng số đó là một số nguyên
    • Kiểm tra xem số nguyên có giá trị từ 0 đến 255 không

Thực hiện chức năng của chúng tôi đối với cùng một địa chỉ IP được sử dụng trước đó

________số 8

Đầu ra là chính xác

Xác thực địa chỉ IP bằng Regex

Một địa chỉ IP có thể được xác thực bằng biểu thức chính quy [regex]

Các biểu thức chính quy cung cấp các biểu thức cụ thể để khớp với các mẫu [e. g. bốn số liên tiếp có ba chữ số]

Đây là mô hình chúng ta có thể sử dụng

  • ^ đại diện cho phần đầu của chuỗi chúng tôi muốn khớp
  • $ đại diện cho phần cuối của chuỗi
  • \d{1,3} là số nguyên có từ 1 đến 3 chữ số
  • \. phù hợp với một dấu chấm duy nhất
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 

Mở trình bao Python và xác minh biểu thức chính quy này dựa trên một vài địa chỉ IP

# This example requires the requests library be installed.  You can learn more
# about the Requests library here: //docs.python-requests.org/en/latest/

from requests import get

ip = get['//api.ipify.org'].text
print 'My public IP address is:', ip
0

Cái đầu tiên là một IP hợp lệ [10. 10. 10. 10] và nó khớp với biểu thức chính quy

IP thứ hai cũng khớp với biểu thức chính quy ngay cả khi nó chứa số 300 trong phần thứ tư

Đó là bởi vì chúng tôi so khớp các số nguyên có từ 1 đến 3 chữ số. Điều này có nghĩa là sau khi sử dụng biểu thức chính quy, chúng tôi cũng phải xác minh xem phần số cụ thể của địa chỉ IP có giá trị thấp hơn 255 hay không

IP thứ ba không khớp với biểu thức vì phần thứ tư chứa 4 chữ số [3000]

Bây giờ, hãy viết hàm sử dụng biểu thức chính quy này và cũng xác minh rằng mỗi phần có giá trị từ 0 đến 255

Đầu tiên chúng tôi muốn chuyển đổi lại. Khớp đối tượng được trả về bởi re. hàm match[]. Để làm điều đó chúng ta sẽ sử dụng hàm bool[]

# This example requires the requests library be installed.  You can learn more
# about the Requests library here: //docs.python-requests.org/en/latest/

from requests import get

ip = get['//api.ipify.org'].text
print 'My public IP address is:', ip
1

Khi được chuyển đổi thành boolean, đối tượng được trả về bởi re. match[] là True nếu chuỗi được truyền cho nó khớp với mẫu. ngược lại là sai

Vì vậy, hãy bắt đầu bằng cách trả về Sai trong hàm của chúng ta nếu chuỗi [trong trường hợp này là địa chỉ IP] không khớp với mẫu cho định dạng của địa chỉ IP

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
0

Và hoàn thành chức năng bằng cách xác minh rằng mỗi số có giá trị từ 0 đến 255 theo cách chúng ta đã thực hiện trong phần trước

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
1

Đây là kết quả khi bạn thực hiện chức năng này đối với một số địa chỉ IP

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
2

Cách kiểm tra xem IP thuộc loại IPv4 hay IPv6 bằng Python

Một cách đơn giản để kiểm tra xem IP thuộc loại IPv4 hay IPv6 là sử dụng mô-đun ipaddress Python

Khi bạn chuyển địa chỉ IP ở định dạng chuỗi cho ipaddress. ip_address[] một đối tượng mới được tạo

Đối tượng là một trong hai loại ipaddress. IPv4Address hoặc ipaddress. Địa chỉ IPv6. Sử dụng hàm tích hợp isinstance[] để xác minh loại đối tượng được tạo

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
3

Như chúng tôi đã làm trước đây, chúng tôi sử dụng thử ngoại trừ để in một tin nhắn trong trường hợp địa chỉ IP không hợp lệ

Hãy gọi hàm của chúng ta…

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
4

Tốt đẹp. 😀

Cách kiểm tra xem một địa chỉ IP có nằm trong một mạng con nhất định hay không

Mô-đun ipaddress Python cho phép kiểm tra xem địa chỉ IP có phải là một phần của mạng con cụ thể không

Đầu tiên, hãy lấy tất cả các địa chỉ IP trong mạng 192. 168. 1. 0/28

Mô-đun ipaddress cung cấp hàm ip_network[] trả về đối tượng IPv4Network hoặc IPv6Network tùy thuộc vào loại địa chỉ IP được truyền cho hàm

Nếu bạn truyền một đối tượng được hàm ip_network[] trả về vào danh sách, bạn sẽ nhận được danh sách tất cả các IP [đối tượng IPv4Address hoặc IPv6Address] thuộc về mạng con

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
5

Bây giờ chúng ta đã biết điều này, chúng ta có thể tạo một hàm trả về True nếu địa chỉ IP thuộc về mạng con và Sai nếu không

Bắt đầu bằng cách tạo một chức năng đi qua các địa chỉ IP trong mạng

192. 168. 1. 0/28 bằng cách sử dụng vòng lặp Python for.
>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
6

đầu ra là

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
7

Và bây giờ chúng tôi sẽ trả về True nếu bất kỳ địa chỉ IP nào trong mạng con khớp với địa chỉ IP được truyền cho hàm làm đối số đầu tiên

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
8

Bạn có thể sử dụng câu lệnh khẳng định để kiểm tra chức năng này…

>>> ipaddress.ip_address["10.10.10.300"]
Traceback [most recent call last]:
  File "", line 1, in 
  File "/opt/anaconda3/lib/python3.8/ipaddress.py", line 53, in ip_address
    raise ValueError['%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '10.10.10.300' does not appear to be an IPv4 or IPv6 address 
9

Xác nhận cho IP

192. 168. 1. 200 không thành công vì IP không thuộc mạng con192. 168. 1. 0/28

Chúng tôi không thấy bất kỳ ngoại lệ nào đối với IP

192. 168. 1. 8 vì nó là một phần của mạng con và khẳng định không in bất kỳ thông báo nào nếu điều kiện được kiểm tra là Đúng

Chuyển đổi địa chỉ IP sang các định dạng khác để xác thực

Trong một số trường hợp, bạn có thể cần chuyển đổi địa chỉ IP được tạo bằng mô-đun ipaddress sang các định dạng khác trước khi thực hiện bất kỳ xác thực nào

Để chuyển đổi địa chỉ IP thành chuỗi, bạn có thể sử dụng hàm str[]

Ghi chú. nhớ nhập mô-đun ipaddress trước nếu không bạn sẽ thấy ngoại lệ NameError khi cố gắng sử dụng mô-đun

import ipaddress 

def validate_ip_address[address]:
    try:
        ip = ipaddress.ip_address[address]
        print["IP address {} is valid. The object returned is {}".format[address, ip]]
    except ValueError:
        print["IP address {} is not valid".format[address]] 
0Để chuyển đổi địa chỉ IP thành số nguyên, bạn có thể sử dụng hàm int[].
import ipaddress 

def validate_ip_address[address]:
    try:
        ip = ipaddress.ip_address[address]
        print["IP address {} is valid. The object returned is {}".format[address, ip]]
    except ValueError:
        print["IP address {} is not valid".format[address]] 
1Để chuyển đổi địa chỉ IP từ số nguyên thành đối tượng byte, bạn có thể sử dụng hàm thev4_int_to_packed[].
import ipaddress 

def validate_ip_address[address]:
    try:
        ip = ipaddress.ip_address[address]
        print["IP address {} is valid. The object returned is {}".format[address, ip]]
    except ValueError:
        print["IP address {} is not valid".format[address]] 
2

Một chức năng tương tự,

v6_int_to_packed[], áp dụng cho địa chỉ IPv6

Sự kết luận

Trong hướng dẫn này, chúng ta đã thực hiện một cách rất đơn giản để thực hiện xác thực địa chỉ IP bằng thư viện ipaddress Python

Chúng ta cũng đã thấy cách sử dụng hàm tùy chỉnh và biểu thức chính quy để xác thực IP

Cuối cùng, chúng ta đã thấy cách xác minh xem một địa chỉ IP cụ thể có thuộc một mạng con hay không

Bạn sẽ sử dụng phương pháp nào trong chương trình của mình?

Bài viết liên quan

Python Virtualenv hoạt động như thế nào. Hãy cùng tìm hiểu

Học lập trình máy tính. Một điều bạn phải biết

Cách tách chuỗi Python. Tìm hiểu cơ bản về lập trình

Claudio Sabato

Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng

Chủ Đề