Tập lệnh Python để mở cổng

Nếu bạn đang thực hiện điều này trên Windows, bạn có thể thêm import os ở trên cùng và os.system['pause'] ở dưới cùng. Điều đó sẽ ngăn tệp python tự động đóng, giả sử bạn không thực hiện điều này trực tiếp từ dòng lệnh

Ngoài ra, tôi đoán có lẽ tôi nên chỉ ra rằng “cổng… đang mở” có nghĩa là cổng hiện đang được sử dụng, trong khi “cổng… đã đóng” có nghĩa là nó hiện không được sử dụng

Trước tiên, bạn sẽ cần nhập các mô-đun cần thiết để tạo tập lệnh Python nhằm phát hiện các cổng đang mở trên máy chủ. Bạn có thể làm điều này bằng cách sử dụng câu lệnh nhập trong Python như sau

import socket
import os

Mô-đun socket cung cấp giao diện cấp thấp cho API ổ cắm mạng, trong khi mô-đun os cung cấp cách tương tác với hệ điều hành cơ bản

Tiếp theo, bạn có thể tạo một chức năng sẽ được sử dụng để quét một cổng cụ thể trên máy chủ. Hàm này sẽ lấy địa chỉ IP của máy chủ và số cổng được quét làm đối số và nó sẽ trả về giá trị True nếu cổng đang mở hoặc False nếu cổng đang đóng

def scan_port[server_ip, port]:
    try:
        s = socket.socket[socket.AF_INET, socket.SOCK_STREAM]
        s.connect[[server_ip, port]]
        return True
    except:
        return False

Hàm scan_port sử dụng phương thức socket.socket[] để tạo một đối tượng ổ cắm mới. Sau đó, nó sử dụng phương pháp connect[] để cố gắng kết nối với máy chủ được chỉ định trên cổng đã cho. Nếu kết nối thành công, hàm trả về True. Nếu xảy ra lỗi, thay vào đó, hàm sẽ trả về False

Để sử dụng chức năng này để quét một dải cổng trên máy chủ, bạn có thể sử dụng vòng lặp for để lặp lại dải cổng đó và gọi hàm

def scan_port[server_ip, port]:
    try:
        s = socket.socket[socket.AF_INET, socket.SOCK_STREAM]
        s.connect[[server_ip, port]]
        return True
    except:
        return False
0 cho mỗi cổng trong dải. Sau đó, bạn có thể in kết quả quét ra bàn điều khiển hoặc lưu chúng vào một tệp

server_ip = '192.168.1.1'

for port in range[1, 65535]:
    if scan_port[server_ip, port]:
        print[f'Port {port} is open']
    else:
        print[f'Port {port} is closed']

Trong ví dụ này, hàm

def scan_port[server_ip, port]:
    try:
        s = socket.socket[socket.AF_INET, socket.SOCK_STREAM]
        s.connect[[server_ip, port]]
        return True
    except:
        return False
0 được gọi cho mỗi cổng trong phạm vi từ 1 đến 65535 và kết quả được in ra bàn điều khiển

Lưu ý rằng tập lệnh này sẽ chỉ phát hiện các cổng mở trên mạng cục bộ. Để quét các cổng trên máy chủ từ xa, bạn sẽ cần sử dụng một công cụ được thiết kế cho mục đích này, chẳng hạn như nmap hoặc telnet

Bài đăng này sẽ chỉ ra cách bạn có thể tạo một chương trình quét cổng nhỏ và dễ sử dụng được viết bằng Python. Có nhiều cách để làm điều này với Python và tôi sẽ làm điều đó bằng cách sử dụng Socket mô-đun tích hợp sẵn

Mục lục

Trình quét cổng bằng cách sử dụng ổ cắm trong Python

Mô-đun ổ cắm trong Python cung cấp quyền truy cập vào giao diện ổ cắm BSD. Nó bao gồm lớp ổ cắm, để xử lý kênh dữ liệu thực tế và các chức năng cho các tác vụ liên quan đến mạng như chuyển đổi tên của máy chủ thành địa chỉ và định dạng dữ liệu được gửi qua mạng

Ổ cắm được sử dụng rộng rãi trên Internet, vì chúng đứng đằng sau bất kỳ loại giao tiếp mạng nào được thực hiện bởi máy tính của bạn. Ổ cắm INET chiếm ít nhất 99% ổ cắm đang sử dụng. Các trình duyệt web mà bạn sử dụng mở một ổ cắm và kết nối với máy chủ web

Mọi giao tiếp mạng đều đi qua một ổ cắm

Để đọc thêm về mô-đun ổ cắm, vui lòng xem tài liệu chính thức

Chức năng ổ cắm

Trước khi chúng tôi bắt đầu với chương trình mẫu của mình, hãy xem một số hàm ổ cắm mà chúng tôi sẽ sử dụng


Syntax for creating a socket
sock = socket.socket [socket_family, socket_type]

Creates a stream socket
sock = socket.socket [socket.AF_INET, socket.SOCK_STREAM]

AF_INET 
Socket Family [here Address Family version 4 or IPv4] 

SOCK_STREAM Socket type TCP connections 

SOCK_DGRAM Socket type UDP connections 

Translate a host name to IPv4 address format 
gethostbyname["host"] 

Translate a host name to IPv4 address format, extended interface
socket.gethostbyname_ex["host"]  

Get the fqdn [fully qualified domain name]
socket.getfqdn["8.8.8.8"]  

Returns the hostname of the machine..
socket.gethostname[]  

Exception handling
socket.error

Viết chương trình bằng Python Sockets

Làm cách nào để tạo một chương trình quét cổng đơn giản bằng Python?

Chương trình quét cổng nhỏ này sẽ cố gắng kết nối trên mọi cổng bạn xác định cho một máy chủ cụ thể. Điều đầu tiên chúng ta phải làm là nhập thư viện ổ cắm và các thư viện khác mà chúng ta cần

Mở trình soạn thảo văn bản, sao chép và dán mã bên dưới

Lưu tệp dưới dạng “portscanner. py” và thoát khỏi trình chỉnh sửa

#!/usr/bin/env python
import socket
import subprocess
import sys
from datetime import datetime

# Clear the screen
subprocess.call['clear', shell=True]

# Ask for input
remoteServer    = raw_input["Enter a remote host to scan: "]
remoteServerIP  = socket.gethostbyname[remoteServer]

# Print a nice banner with information on which host we are about to scan
print "-" * 60
print "Please wait, scanning remote host", remoteServerIP
print "-" * 60

# Check what time the scan started
t1 = datetime.now[]

# Using the range function to specify ports [here it will scans all ports between 1 and 1024]

# We also put in some error handling for catching errors

try:
    for port in range[1,1025]:  
        sock = socket.socket[socket.AF_INET, socket.SOCK_STREAM]
        result = sock.connect_ex[[remoteServerIP, port]]
        if result == 0:
            print "Port {}: 	 Open".format[port]
        sock.close[]

except KeyboardInterrupt:
    print "You pressed Ctrl+C"
    sys.exit[]

except socket.gaierror:
    print 'Hostname could not be resolved. Exiting'
    sys.exit[]

except socket.error:
    print "Couldn't connect to server"
    sys.exit[]

# Checking the time again
t2 = datetime.now[]

# Calculates the difference of time, to see how long it took to run the script
total =  t2 - t1

# Printing the information to screen
print 'Scanning Completed in: ', total

Hãy chạy chương trình và xem đầu ra trông như thế nào

$ python portscanner.py

Enter a remote host to scan: www.your_host_example.com
------------------------------------------------------------
Please wait, scanning remote host xxxx.xxxx.xxxx.xxxx
------------------------------------------------------------

Port 21:   Open
Port 22:    Open
Port 23:    Open
Port 80:    Open
Port 110:   Open
Port 111:   Open
Port 143:   Open
Port 443:   Open
Port 465:   Open
Port 587:   Open
Port 993:   Open
Port 995:   Open

Scanning Completed in:  0:06:34.705170

Bạn có thể quan sát trong ví dụ trên rằng trình quét cổng sẽ quét tất cả các cổng trong thiết bị và đề cập xem các cổng đó đang mở hay đóng

Phần kết luận

Trong bài viết này, chúng ta đã thảo luận về chương trình python sử dụng mô-đun socket để tạo trình quét cổng. Chương trình này dành cho các cá nhân để kiểm tra thiết bị của chính họ về tính bảo mật yếu và tác giả sẽ không chịu trách nhiệm nếu nó được sử dụng cho bất kỳ mục đích nào khác

Để tìm hiểu thêm về lập trình python, bạn có thể đọc bài viết này trên python simplehttpserver. Bạn cũng có thể thích bài viết này về trò chơi treo cổ trong python

Có liên quan

Đào tạo Python được đề xuất

Khóa học. Python 3 cho người mới bắt đầu

Hơn 15 giờ nội dung video với hướng dẫn có hướng dẫn cho người mới bắt đầu. Tìm hiểu cách tạo các ứng dụng trong thế giới thực và nắm vững kiến ​​thức cơ bản

Làm cách nào để kiểm tra các cổng đang mở trong Python?

Bạn có thể. .
Kiểm tra tất cả các cổng được sử dụng bởi một pid cụ thể. proc = psutil. Proc in quy trình [pid]. kết nối[]
Kiểm tra tất cả các cổng được sử dụng trên máy cục bộ. in psutil. net_connections[]

Máy quét cổng trong Python là gì?

Quét cổng có thể được định nghĩa là kỹ thuật giám sát, được sử dụng để xác định vị trí các cổng mở có sẵn trên một máy chủ cụ thể . Quản trị viên mạng, người kiểm tra thâm nhập hoặc tin tặc có thể sử dụng kỹ thuật này.

Làm cách nào để kiểm tra các cổng đã sử dụng trong Linux?

Kiểm tra các cổng đang mở trong Linux .
Mở một ứng dụng đầu cuối Linux
Sử dụng lệnh ss để hiển thị tất cả các cổng TCP và UDP đang mở trong Linux
Một tùy chọn khác là sử dụng lệnh netstat để liệt kê tất cả các cổng trong Linux
Ngoài ss/netstat, người ta có thể sử dụng lệnh lsof để liệt kê các tệp và cổng đang mở trên hệ thống dựa trên Linux

Chủ Đề