Python là một ngôn ngữ lập trình thông dịch đa mục đích, hiện đã ghi dấu ấn rất tốt trong thế giới Khoa học Máy tính và quan trọng nhất là đối với an ninh mạng.
Đây không phải là một bài viết độc lập chỉ giải thích python là gì và giới thiệu một số lệnh cơ bản. Bài viết này sẽ là phần khởi đầu cho các bài python về an ninh mạng khác. Lưu ý là trong suốt quá trình này mình sẽ sử dụng Python3 trên Ubuntu 18.04 nhé.
Bước đầu tiên khi học python
Python có thể được cài đặt từ kho lưu trữ apt tiêu chuẩn của linux bằng cách nhập lệnh sudo apt-get install python3
để cài đặt python3 trong máy của bạn. Để sử dụng python, bạn chỉ cần nhập python trong Terminal của mình, nó sẽ đưa bạn đến shell của python.
robin@python:~$ python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Đối với Windows, bạn tải Python For Windows, khi cài đặt ở màn hình đầu tiên nhớ chọn Add Path…. Sau khi cài xong thì mở CMD lên gõ lệnh python
xem chạy không nhé.
Các khái niệm cơ bản
Bắt đầu với những điều cơ bản, mình sẽ giải thích các khái niệm khác nhau sẽ được sử dụng để hiểu những gì bạn đang làm và cũng sẽ giúp bạn gỡ lỗi chương trình.
Biến
Một biến trỏ đến dữ liệu được lưu trữ trong một vị trí bộ nhớ. Một bộ nhớ thường có thể chứa các chuỗi, số thực, giá trị Boolean, số nguyên hoặc các kiểu dữ liệu phức tạp hơn như sets, list, và dictionary.
Lưu ý: Trong Python, bạn không phải xác định rõ ràng kiểu dữ liệu như C / C ++. Chuỗi của Python có thể đặt ở trong dấu nháy đơn cũng như dấu ngoặc kép, không khác nhau như PHP/Perl.
Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> a_string = "Hello" # A string in duble quotations >>> a_string 'Hello' >>> a_string = 'Hello' # A string in single quotations >>> a_string 'Hello' >>> num = 5 # A integer value >>> num 5 >>> float = 1.34 # A float value >>> float 1.34 >>> Boolean = True # A boolean value >>> Boolean True >>>
Ở trên, mình đã khai báo các loại biến khác nhau mà không cần phải xác định giống như C++.
Chuỗi
Chuỗi là một đối tượng bất biến trong python có nghĩa là sau khi được tạo, bạn không thể thay đổi nội dung của nó (anh em nào không hiểu chỗ này thì đọc bài này và bài này nữa nhé). Như đã nói trước đây, không quan trọng nếu bạn sử dụng dấu nháy đơn hay dấu nháy kép. Hàm len
được sử dụng để lấy độ dài của chuỗi.
>>> var = "Hello, this is a string" >>> var 'Hello, this is a string' >>> new_var = 'Hello, this is a string' >>>new_var 'Hello, this is a string'
Số nguyên và Số thực
Một số nguyên trong python có thể ở dạng âm hoặc dương vì nó không yêu cầu bất kỳ quy định nào về kiểu dữ liệu biến như số nguyên không dấu và có dấu trong C.
>>> a_int = 5 >>> a_int 5 >>> a_float = 1.43 >>> a_float 1.43
Như bạn thấy, không cần khai báo biến, chúng ta có thể tiết kiệm rất nhiều thời gian và nhanh chóng sử dụng các đối tượng mới.
List, Set và Dictionary
List
List là một tập hợp các kiểu dữ liệu đồng nhất hoặc không đồng nhất có nghĩa là chúng ta có thể lưu trữ các kiểu dữ liệu khác nhau trong cùng một list. Một list có thể chứa cá dữ liệu trùng lặp. Để truy cập dữ liệu trong list, bạn có thể sử dụng chỉ mục (index), tức là vị trí của phần tử trong list.
>>> lists ["A","B","C","D"] >>> lists[0] # value atposition zero 'A'
Set
Mặt khác, set là một kiểu dữ liệu có thể thay đổi, có thể được sử dụng để lưu trữ các kiểu dữ liệu khác nhau nhưng không chứa các dữ liệu bị trùng lặp.
>>> lists = ["A","B","C","D","A","B"] >>> set(lists) ["A","B","C","D"]
Dictionary
Dictionary là một bảng băm chứa các khóa và các giá trị tương ứng của chúng. Nó có thời gian truy cập O(1) có nghĩa là mất một khoảng thời gian không đổi để truy xuất dữ liệu. Một giá trị trong dictionary có thể được truy cập từ các keys (khóa).
>>> dictionary {'Foo': 'Bar', 'Bacon': 'Fish'} >>> dictionary['Foo'] 'Bar' >>> dictionary['Bacon'] 'Fish'
Input
Cú pháp input
được sử dụng để lấy dữ liệu đầu vào từ người dùng trong Terminal. Theo mặc định, giá trị đầu vào sẽ là chuỗi. Nhưng bạn cũng có thể ép kiểu dữ liệu từ chuỗi sang số bằng cách thêm các hàm như int()
, float()
ở ngoài hàm input()
.
#!/usr/bin/env python3 name = input("Enter Name: ") age = int(input("Enter age:" )) # Chuyển chuỗi sang số nguyên height = float(input("Enter height: ") #Chuyển chuỗi sang số thực
Đầu tiên, biến name sẽ nhận đầu vào là một chuỗi và age sẽ nhận đầu vào là một số nguyên trong khi biến height sẽ nhận đầu vào là số thực. Nếu bất kỳ loại đối tượng nào khác được nhập, nó sẽ dẫn đến lỗi ngoại lệ (Exception).
Toán tử
+
: Nối hai chuỗi hoặc cộng hai số nguyên/thực.-
: Trừ các số nguyên/thực.=
: Dùng để gán giá trị cho biến.==
: Dùng để so sánh bằng hai biến tương tự có cùng một kiểu dữ liệu. Ví dụ 1 == 1, kết quả sẽ là True.!=
: Dùng để so sánh khác hai biến có cùng kiểu dữ liệu. Ví dụ 1 != 1, kết quả sẽ là False.%
: Chia lấy phần nguyên của 2 số. Ví dụ 10 % 3 = 3.*
: Dùng để nhân một giá trị. Cũng có thể nhân chuỗi. Ví dụ:'Ad' + ' dep trai' * 5
, kết quả sẽ làAd dep trai dep trai dep trai dep trai dep trai
.>=
và<=
: Được sử dụng để so sánh lớn hơn hoặc bằng và nhỏ hơn hoặc bằng.and
: Toán tử AND sẽ có kết quả là True nếu thỏa mãn hết tất cả điều kiện.or
: Toán tử OR sẽ có kết quả là True nếu chỉ cần thỏa mãn 1 trong những điều kiện.not
: Toán tử phủ định. Ví dụ: not True sẽ là False.
Điều khiển luồng lệnh
Câu lệnh if, elif và else
Các câu lệnh này được gọi là câu lệnh điều kiện. Được sử dụng để kiểm tra một điều kiện sau đó thực hiện xử lý dữ liệu.Ví dụ:
user = input("Enter Username: ") password = input("Enter Password: ") if user == "admin" and password == "123": print("Welcome Admin") elif user == "guest" and password == "guest": print("Welcome Guest") else: print("Wrong credentials")
user và password đều là biến và nhận đầu vào từ người dùng bằng hàm input
. Ở dòng số 6, chúng ta có lệnh if để kiểm tra xem user có bằng với chuỗi “admin” và password bằng với chuỗi “123” hay không. Câu lệnh and
được sử dụng để đảm bảo 2 điều kiện trên đều True. Trên dòng số 8, chúng ta đang kiểm tra xem user và password có bằng “guest” hay không. Trên dòng số 10, lệnh print
sẽ được chạy nếu hai điều kiện trên đều không được thỏa mãn.
Vòng lặp for
Câu lệnh for..in
là một câu lệnh vòng lặp, lặp lại lệnh theo số lần mà người dùng muốn.
num = 5 for i in range(num): print(i) # Will print 0,1,2,3,4
Ở dòng 2, có một câu lệnh for..in sử dụng hàm range
để lặp lại từ 0 cho đến 4. Vòng lặp for có thể được sử dụng để duyệt các loại dữ liệu khác nhau như list, string,…
Vòng lặp while
Câu lệnh while cho phép bạn lặp lại một khối lệnh miễn là một điều kiện đúng. Ví dụ:
num = 0 while num < 10: num += 1 print(num)
Trên dòng 1, chúng ta có biến num được gán giá trị 0. Dòng 2 có lệnh while sẽ được chạy cho đến khi giá trị num bằng hoặc lớn hơn 10 thì dừng. Trên dòng 3, chúng ta lệnh tăng num lên 1 sau mỗi lần lặp. Do đó ở dòng 4, chúng ta sẽ nhận được giá trị là 10.
Hàm
Hàm (function) là những phần chương trình có thể tái sử dụng. Chúng cho phép bạn đặt tên cho một khối câu lệnh, cho phép bạn chạy khối đó bằng cách gọi tên được chỉ định ở bất kỳ đâu trong chương trình của bạn và không giới hạn số lần gọi.
Cấu trúc của hàm:
def func_name(arg): -- your code -- return result
Từ khóadef
ở đầu để xác định một hàm. func_name
sẽ là tên của hàm. arg
là tham số và return
cho kết quả cuối cùng. Trong python, hàm không nhất thiết phải có return
.
Exceptions –Ngoại lệ
Các trường hợp ngoại lệ xảy ra khi các tình huống đặc biệt xảy ra trong chương trình của bạn. Ví dụ, điều gì sẽ xảy ra nếu bạn đang đọc một tệp và tệp đó không tồn tại? Hoặc nếu bạn vô tình xóa nó khi chương trình đang chạy thì sao? Những tình huống như vậy được xử lý bằng cách sử dụng các ngoại lệ (Exceptions).
Ví dụ một lệnh gọi hàm print
đơn giản. Điều gì sẽ xảy ra nếu chúng ta viết sai thành Print? Trong trường hợp này, Python sẽ báo lỗi cú pháp.
Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'Print' is not defined >>> print("Hello World") Hello World
Xử lý các trường hợp ngoại lệ
Chúng ta có thể xử lý các ngoại lệ bằng cách sử dụng câu lệnh try..except
. Về cơ bản, chúng ta đặt các câu lệnh thông thường trong khối try
và đặt tất cả các trường hợp xử lý lỗi vào khối except.
try: text = input('Enter something --> ') except EOFError: print('Why did you do an EOF on me?') except KeyboardInterrupt: print('You cancelled the operation.') else: print('You entered {}'.format(text))
Chúng ta đặt tất cả các câu lệnh có thể tạo ra các ngoại lệ/lỗi bên trong khối try
và sau đó đặt các lệnh xử lý cho các lỗi/ngoại lệ trong except
. Except
có thể xử lý một lỗi hoặc ngoại lệ được chỉ định hoặc một danh sách các lỗi/ngoại lệ được đặt trong ngoặc đơn. Nếu không có tên lỗi hoặc ngoại lệ nào được cung cấp, nó sẽ xử lý tất cả các lỗi và ngoại lệ.
Module thư viện
Cũng như cách bạn sử dụng lại code như trong hàm. Bạn cũng có thể sử dụng lại code của một chương trình khác trong 1 file khác nữa. Đó gọi là module thư viện.
Một module thư viện có thể được sử dụng bởi một chương trình khác để sử dụng chức năng của nó. Đây là cách chúng ta có thể sử dụng thư viện chuẩn Python. Đầu tiên, chúng ta sẽ xem cách sử dụng các module thư viện tiêu chuẩn.
import sys print('The command line arguments are:') for i in sys.argv: print(i) print('nnThe PYTHONPATH is', sys.path, 'n')
Truy cập thư viện sys bằng cách sử dụng lệnh import
. Về cơ bản, điều này có nghĩa là chúng ta nói với Python rằng chúng ta muốn sử dụng module này. Module sys chứa các hàm liên quan đến trình thông dịch Python và môi trường, hệ thống.
Khi Python thực thi câu lệnh import sys, nó sẽ tìm kiếm module sys. Trong trường hợp này, nó là một trong những mô-đun được tích hợp sẵn và do đó Python biết phải tìm ở đâu.
Tổng kết
Python là một trong những ngôn ngữ được yêu thích và phổ biến nhất. Nó cũng được sử dụng trong nhiều mảng khác nhau như web, app, bảo mật. Bạn có thể đọc thêm nhiều bài python tại đây. Ngoài ra, để viết code Python, mình khuyên bạn nên sử dụng Sublime Text 3 hoặc Visual Studio Code.