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ệpserver_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ểnLư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