Luật an ninh mạng 2018 quy định rõ hành vi phá hoại trên không gian mạng là hành vi vi phạm pháp luật nhà nước Việt Nam

Tự tạo công cụ scan port bằng Python

Tự tạo công cụ scan port bằng Python 



Tự tạo công cụ scan port bằng Python 

Trên IT Việt Nam , ta đã có tìm hiểu qua một số bài học cơ bản về Python , tuy còn thiếu nhiều vì dạo này không có thời gian rảnh. Phải tu tâm dưỡng học hành không thì chắc có nước về nhà chăn trâu . Ok quay lại vấn đề chính, trong bài viết này , chúng ta sẽ cùng tìm hiểu cách viết chương trình bằng Python để quét port . Còn quét làm gì thì các bạn tự tìm hiểu thêm nhé !

Công cụ này viết bằng Python 3. Là công cụ đơn giản mà chúng ta sẽ cùng nhau tạo nên, còn tùy biến ra sao thì tùy các bạn . Chú ý luôn với các bạn là " chương trình đơn giản nhất " nên đừng mong nó giống như những công cụ đặc dụng quét port khác nhé ! .

Tự tạo công cụ scan port bằng Python 

Ok Tiếp , để viết chương trình này ta cần các dụng cụ sau :

  • Hệ điều hành Linux ( Windows cũng được mà Android cũng chả sao )
  • Cài sẵn Python 3 .
  • Tự đánh máy , không copy và paste . Mà có muốn cũng chả được đâu . 😂 .
Vì đây là chương trình đơn giản , nên không cần quá nhiều module và các modules cần thiết thì đều có sẵn không cần pip về. 

Để biết nguyên tắc tạo ra chương trình quét port này, ta cần xác định ý tưởng xây dựng công cụ . Ý tưởng thì khá là đơn giản . Như thế này :
  • Như các bạn đã biết , kết nối đến một trang web thì ta sẽ có hai cách kết nối . 
    1. Dùng tên miền . 
    2. Dùng IP của website đó 
  • Thì với cách 1 thì cốt lõi của nó cũng là cần phân giản tên miền sang IP bằng DNS Server . Nhưng không phải ai cũng rảnh để nhớ IP của Website , vì vậy làm thế nào đây ? 
  • Ồ ! Định mệnh , Python 3 đã có module socket lo tất . Wow 😍, ta sẽ dùng gethostbyname để lấy IP từ domain . 
  • Vậy ta đã có IP của Website , port thì là quét port nên hiện tại không quan tâm . Vậy làm thế nào để kết nối ? . Socket lo luôn . 
  • A cái thằng này ! Vậy ý tưởng của mày là làm thế nào để xác định port mở hay không ? 
    1. Ở đây ta sẽ gán mỗi port lần lượt với IP Web và xác định chúng có mở hay không bằng cách kết nối tới web thông qua port đó, nếu có phản hồi, port mở, ngược lại , port đóng .
À, vậy ra đó là ý tưởng, vậy giờ đi xây dựng phác thảo hu .
  1. Dùng input để lấy tên domain từ người dùng và khoảng port muốn quét . 
  2. Dùng gethostbyname của socket để lấy ip của web đó 
  3. Dùng for để lặp lại khoảng port đầu đến cuối ( for - range() ) 
    1. Kết nối ( socket )
    2. Kiểm tra điều kiện ( if - else )
    3. Trả kết quả ( print ) 
  4. Kết thúc chương trình . 

Ý tưởng đã có , phác thảo cũng có luôn. Và đây là việc xây dựng .

1. Nhập các modules cần thiết 

Trong chương trình này ta sẽ dùng duy nhất module socket . Quá đơn giản đúng không nào ! . Mà bạn nào chưa biết module socket dùng làm gì thì chỉ cần biết đơn giản là nó dùng để lập trình mạng 😊 . 


2. Lấy thông tin cần thiết 

Một khi đã có môi trường làm việc rồi . Thì bây giờ ta cần nhiệm vụ để thực hiện dúng không ! . Ở đây ta sẽ lấy các thông tin cơ bản sau : Địa chỉ website , port bắt đầu , port kết thúc . Port bắt đầu và kết thúc ý chỉ người dùng muốn quét từ port bao nhiêu đến port bao nhiêu í . 


Bạn có để ý đến int trong code của tôi không ? . Nếu có thì bạn quả là ok đó , còn không thì chắc là copy chứ chả quan tâm là gì chứ nhỉ . Int dùng chuyển port start và end người dùng nhập vào thành dạng số . Vì lúc dùng input trong python 3 . Cho dù người dùng nhập vào cái gì, trả về luôn là str mà port thì không thể là str nên cần chuyển sang int .

3. Chương trình chính 

Như đã phác thảo trên kia. Thì đây là code hoàn thiện 


Nếu các bạn không biết code trên đang nói gì. Hãy tra google . Gợi ý cho các bạn như sau ( Tính từ dòng thứ 4 ) :
  1. Lặp lại cho từ port_start đến port_end thì kết thúc lặp 
    1. # là comment , bỏ qua 
    2. Set thời gian kết thúc kết nối đến IP qua port đó là 0.5 giây . Nguyên do ư , thông thường có nhiều port nó không mở nhưng mà socket vần thiết lập và đợi phản hồi nên có khi chờ cả ngày để có được phản hồi " Không thể kết nối " . Vậy nên tôi nghĩ 0.5 giây là đủ để xác định rằng port có mở hay không .
    3. Là các thiết lập cơ bản cho socket [ Tìm hiểu trên google đi nhé ]
    4. Đặt biến result là kết nối đến web đó ( Chú ý là connetc_ex khác connect thường nhé. Cẩn thận nhầm lẫn )
    5. Nếu kết nối lỗi bằng 0 
      1. Ok ! Port mở 
    6. Ngược lại .
      1. Đóng 
OK ! Thế thôi . Tự test đi nhé ! 

Đây là toàn bộ code :


OK ! DONE 

[ " Trong lớp sướng nhất vẫn là đứa con của thầy cô. Nó làm gì thì cũng luôn đúng " ]