1️⃣8️⃣
فقط از سمت راست حذف میکند.
نتیجه:
1️⃣9️⃣
حروف بزرگ را کوچک و حروف کوچک را بزرگ میکند:
نتیجه:
⚠️
یعنی:
2️⃣0️⃣
برای جایگزین کردن یک بخش از رشته:
خروجی:
مثلاً:
خروجی:
rstrip()فقط از سمت راست حذف میکند.
text = "ali,,,"
print(text.rstrip(","))
نتیجه:
ali
1️⃣9️⃣
swapcase()حروف بزرگ را کوچک و حروف کوچک را بزرگ میکند:
text = "Ali PYTHON"
print(text.swapcase())
نتیجه:
aLI python
⚠️
swapcase() معمولاً آرگومان نمیگیرد.یعنی:
text.swapcase()
2️⃣0️⃣
replace()برای جایگزین کردن یک بخش از رشته:
name = "ali"
print(name.replace("a", "A"))
خروجی:
Ali
مثلاً:
text = "I like Python"
print(text.replace("Python", "Linux"))
خروجی:
I like Linux
My folder vip
1️⃣8️⃣ rstrip() فقط از سمت راست حذف میکند. text = "ali,,," print(text.rstrip(",")) نتیجه: ali 1️⃣9️⃣ swapcase() حروف بزرگ را کوچک و حروف کوچک را بزرگ میکند: text = "Ali PYTHON" print(text.swapcase()) نتیجه: aLI python ⚠️ swapcase() معمولاً آرگومان نمیگیرد.…
🔐 مثال کاربردی در امنیت
فرض کن ورودی کاربر را میگیریم و میخواهیم Username را استاندارد کنیم:
اگر کاربر وارد کند:
نتیجه:
این نوع پاکسازی و استانداردسازی ورودیها در برنامههای واقعی خیلی کاربردی است.
فرض کن ورودی کاربر را میگیریم و میخواهیم Username را استاندارد کنیم:
username = input("Enter username: ")
username = username.strip().lower()
print(username)اگر کاربر وارد کند:
ALI
نتیجه:
ali
این نوع پاکسازی و استانداردسازی ورودیها در برنامههای واقعی خیلی کاربردی است.
🐍 فصل نهم — پایتون مقدماتی varuable scope
—————————————-
1️⃣ Variable Scope چیست؟
در پایتون متغیرها میتوانند محدودههای مختلفی داشته باشند؛ مثلاً:
————————
2️⃣ Local Variable — متغیر محلی
متغیری که داخل یک تابع تعریف میشود، بهصورت پیشفرض Local است.
مثلاً:
خروجی:
اینجا متغیر
اگر بیرون تابع به آن دسترسی پیدا کنیم:
❌ خطا میگیریم:
چون
نکته: متغیر Local معمولاً فقط در محدوده تابعی که داخل آن تعریف شده، قابل دسترسی است.
————————
3️⃣ Global Variable — متغیر سراسری
متغیری که خارج از توابع تعریف میشود، در سطح ماژول Global است.
مثلاً:
خروجی:
چون تابع میتواند متغیر Global را بخواند.
اما اگر بخواهیم مقدار Global را داخل تابع تغییر دهیم چه؟
اینجا از کلمه کلیدی
خروجی:
با
پس مقدار متغیر اصلی تغییر میکند.
⚠️ دقت کن: اگر فقط بخواهیم مقدار Global را بخوانیم، معمولاً نیازی به
————————-
4️⃣ Nonlocal — متغیر در تابع بیرونی
حالا میرسیم به قسمت مهم جزوهات! 🔥
فرض کن یک تابع داریم که داخل آن، تابع دیگری تعریف شده است.
خروجی:
بیایم خطبهخط بررسی کنیم:
ابتدا تابع
بعد تابع
داخل آن داریم:
یعنی:
سپس:
در هر بار فراخوانی، مقدار
پس:
فراخوانی
مقدار count
بار اول
1
بار دوم
2
بار سوم
3
اگر
اگر داخل
پایتون خطای
بنابراین برای تغییر متغیر تابع بیرونی از
———————-
5️⃣ تفاوت Global و Nonlocal
این قسمت امتحانیه! 🎯
کلمه کلیدی
کاربرد
تغییر متغیر در سطح ماژول
تغییر متغیر در تابع بیرونیِ نزدیکتر
بدون این کلمات
انتساب به نام متغیر داخل تابع معمولاً آن را Local میکند
مثال ساده:
خروجی:
چرا؟
———————
—————————————-
1️⃣ Variable Scope چیست؟
Scope یعنی محدودهای از برنامه که در آن میتوانیم به یک متغیر دسترسی داشته باشیم.در پایتون متغیرها میتوانند محدودههای مختلفی داشته باشند؛ مثلاً:
Local → متغیر محلی داخل تابعGlobal → متغیر سراسری در سطح ماژولNonlocal → متغیر مربوط به تابع بیرونی در توابع تو در تو————————
2️⃣ Local Variable — متغیر محلی
متغیری که داخل یک تابع تعریف میشود، بهصورت پیشفرض Local است.
مثلاً:
def my_func():
x = 10
print(x)
my_func()
خروجی:
10
اینجا متغیر
x داخل تابع تعریف شده و در محدوده همان تابع قابل دسترسی است.اگر بیرون تابع به آن دسترسی پیدا کنیم:
def my_func():
x = 10
my_func()
print(x)
❌ خطا میگیریم:
NameError
چون
x یک متغیر Local است و بیرون از تابع تعریف نشده.نکته: متغیر Local معمولاً فقط در محدوده تابعی که داخل آن تعریف شده، قابل دسترسی است.
————————
3️⃣ Global Variable — متغیر سراسری
متغیری که خارج از توابع تعریف میشود، در سطح ماژول Global است.
مثلاً:
x = 10
def my_func():
print(x)
my_func()
خروجی:
10
چون تابع میتواند متغیر Global را بخواند.
اما اگر بخواهیم مقدار Global را داخل تابع تغییر دهیم چه؟
اینجا از کلمه کلیدی
global استفاده میکنیم.x = 5
def my_func():
global x
x = 10
my_func()
print(x)
خروجی:
10
با
global x به پایتون میگوییم که منظورمان همان متغیر x در سطح ماژول است، نه یک متغیر محلی جدید.پس مقدار متغیر اصلی تغییر میکند.
⚠️ دقت کن: اگر فقط بخواهیم مقدار Global را بخوانیم، معمولاً نیازی به
global نداریم؛ این کلمه برای انتساب مجدد به متغیر Global استفاده میشود.————————-
4️⃣ Nonlocal — متغیر در تابع بیرونی
حالا میرسیم به قسمت مهم جزوهات! 🔥
nonlocal در توابع تو در تو (Nested Functions) کاربرد دارد.فرض کن یک تابع داریم که داخل آن، تابع دیگری تعریف شده است.
def outer():
count = 0
def inner():
nonlocal count
count += 1
print(count)
inner()
inner()
inner()
outer()
خروجی:
1
2
3
بیایم خطبهخط بررسی کنیم:
ابتدا تابع
outer() اجرا میشود:count = 0
بعد تابع
inner() تعریف میشود.داخل آن داریم:
nonlocal count
یعنی:
منظورم متغیر
countمتعلق به تابع بیرونی است؛ نمیخواهم یک متغیر محلی جدید بسازم.
سپس:
count += 1
در هر بار فراخوانی، مقدار
count یکی افزایش پیدا میکند.پس:
فراخوانی
مقدار count
بار اول
1
بار دوم
2
بار سوم
3
اگر
nonlocal را حذف کنیم چه میشود؟اگر داخل
inner() بنویسیم:def inner():
count += 1
پایتون خطای
UnboundLocalError میدهد؛ چون count را بهدلیل انتساب داخل تابع، Local در نظر میگیرد، اما قبل از مقداردهی محلی، تلاش میکنیم مقدارش را بخوانیم.بنابراین برای تغییر متغیر تابع بیرونی از
nonlocal استفاده میکنیم.———————-
5️⃣ تفاوت Global و Nonlocal
این قسمت امتحانیه! 🎯
کلمه کلیدی
کاربرد
globalتغییر متغیر در سطح ماژول
nonlocalتغییر متغیر در تابع بیرونیِ نزدیکتر
بدون این کلمات
انتساب به نام متغیر داخل تابع معمولاً آن را Local میکند
مثال ساده:
x = 10
def outer():
y = 20
def inner():
global x
nonlocal y
x = 100
y = 200
inner()
print(y)
outer()
print(x)
خروجی:
200
100
چرا؟
x با global به متغیر سطح ماژول اشاره میکند.y با nonlocal به متغیر تابع outer() اشاره میکند.———————
🐍 فصل دهم — پایتون مقدماتی Lambda Functions
—————————————-
1️⃣ اول از همه: تابع معمولی در Python
تا الان یاد گرفتیم با
خروجی:
این تابع یک عدد میگیرد و مربع آن را برمیگرداند.
اما اگر بخواهیم یک تابع خیلی کوچک و ساده بنویسیم، میتوانیم از Lambda استفاده کنیم.
———————
2️⃣ Lambda چیست؟
ساختار کلی:
مثلاً تابع بالا را با Lambda بنویسیم:
خروجی:
مقایسه تابع معمولی و Lambda
با def:
با lambda:
هر دو نتیجه یکسانی دارند.
نکته مهم امتحانی
در Lambda:
از کلمه کلیدی
میتواند چند پارامتر داشته باشد.
فقط یک عبارت (Expression) دارد.
نتیجه عبارت بهصورت خودکار برگردانده میشود؛ نیازی به
مثلاً:
خروجی:
————————
3️⃣ قبل از Lambda، تابع
تابع
مثلاً فرض کن لیستی از اعداد داریم و میخواهیم همه را دو برابر کنیم.
روش معمولی با for:
خروجی:
حالا با
خروجی:
یعنی:
در این مثال:
تقریباً یعنی:
نکته: در Python 3،
———————-
4️⃣ ترکیب
اینجا قدرت Lambda مشخص میشود! 🔥
بهجای اینکه تابع جداگانه با
میتوانیم مستقیم از Lambda استفاده کنیم:
خروجی:
این کد را چطور بخوانیم؟
یعنی:
———————-
5️⃣ تابع
حالا فرض کنیم لیستی داریم و میخواهیم فقط اعداد زوج را از آن جدا کنیم.
اینجا از
روش معمولی با for:
خروجی:
روش با
خروجی:
————————-
6️⃣ ترکیب
حالا تابع
خروجی:
این کد یعنی چه؟
یعنی:
——————————-
—————————————-
1️⃣ اول از همه: تابع معمولی در Python
تا الان یاد گرفتیم با
def تابع تعریف کنیم:def square(x):
return x * x
print(square(5))
خروجی:
25
این تابع یک عدد میگیرد و مربع آن را برمیگرداند.
اما اگر بخواهیم یک تابع خیلی کوچک و ساده بنویسیم، میتوانیم از Lambda استفاده کنیم.
———————
2️⃣ Lambda چیست؟
lambda یک روش برای ساختن تابع کوچک و بدون نام (Anonymous Function) است.ساختار کلی:
lambda parameters: expression
مثلاً تابع بالا را با Lambda بنویسیم:
square = lambda x: x * x
print(square(5))
خروجی:
25
مقایسه تابع معمولی و Lambda
با def:
def square(x):
return x * x
با lambda:
square = lambda x: x * x
هر دو نتیجه یکسانی دارند.
نکته مهم امتحانی
در Lambda:
از کلمه کلیدی
lambda استفاده میکنیم.میتواند چند پارامتر داشته باشد.
فقط یک عبارت (Expression) دارد.
نتیجه عبارت بهصورت خودکار برگردانده میشود؛ نیازی به
return نیست.مثلاً:
add = lambda a, b: a + b
print(add(10, 20))
خروجی:
30
————————
3️⃣ قبل از Lambda، تابع
map()تابع
map() برای اجرای یک تابع روی تکتک اعضای یک مجموعه قابل پیمایش (Iterable) استفاده میشود.مثلاً فرض کن لیستی از اعداد داریم و میخواهیم همه را دو برابر کنیم.
روش معمولی با for:
numbers = [1, 2, 3, 4, 5]
result = []
for num in numbers:
result.append(num * 2)
print(result)
خروجی:
[2, 4, 6, 8, 10]
حالا با
map():def double(x):
return x * 2
numbers = [1, 2, 3, 4, 5]
result = map(double, numbers)
print(list(result))
خروجی:
[2, 4, 6, 8, 10]
map() دقیقاً چه کار میکند؟map(function, iterable)
یعنی:
تابع را روی هر عضو از مجموعه اجرا کن.
در این مثال:
map(double, numbers)
تقریباً یعنی:
double(1)
double(2)
double(3)
double(4)
double(5)
نکته: در Python 3،
map() یک Iterator برمیگرداند؛ برای دیدن همه نتایج به شکل لیست، از list() استفاده میکنیم.———————-
4️⃣ ترکیب
map() با lambdaاینجا قدرت Lambda مشخص میشود! 🔥
بهجای اینکه تابع جداگانه با
def تعریف کنیم:def double(x):
return x * 2
میتوانیم مستقیم از Lambda استفاده کنیم:
numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x * 2, numbers)
print(list(result))
خروجی:
[2, 4, 6, 8, 10]
این کد را چطور بخوانیم؟
map(lambda x: x * 2, numbers)
یعنی:
هر عدد از
numbersرا بگیر، در 2 ضرب کن و نتیجه را تولید کن.
———————-
5️⃣ تابع
filter()حالا فرض کنیم لیستی داریم و میخواهیم فقط اعداد زوج را از آن جدا کنیم.
اینجا از
filter() استفاده میکنیم.filter() اعضایی را نگه میدارد که نتیجه تابع شرطی برایشان True باشد.روش معمولی با for:
numbers = [1, 2, 3, 4, 5, 6]
result = []
for num in numbers:
if num % 2 == 0:
result.append(num)
print(result)
خروجی:
[2, 4, 6]
روش با
filter():def is_even(x):
return x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
result = filter(is_even, numbers)
print(list(result))
خروجی:
[2, 4, 6]
————————-
6️⃣ ترکیب
filter() با lambdaحالا تابع
is_even() را حذف میکنیم و مستقیماً Lambda مینویسیم:numbers = [1, 2, 3, 4, 5, 6]
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))
خروجی:
[2, 4, 6]
این کد یعنی چه؟
filter(lambda x: x % 2 == 0, numbers)
یعنی:
از بین اعداد، فقط عددهایی را نگه دار که باقیمانده تقسیمشان بر 2 برابر صفر باشد.
——————————-
My folder vip
🐍 فصل دهم — پایتون مقدماتی Lambda Functions —————————————- 1️⃣ اول از همه: تابع معمولی در Python تا الان یاد گرفتیم با def تابع تعریف کنیم: def square(x): return x * x print(square(5)) خروجی: 25 این تابع یک عدد میگیرد و مربع آن را برمیگرداند. اما…
🔐 8️⃣ مثال کاربردی در شبکه و امنیت
فرض کن لیستی از پورتها داریم و میخواهیم پورتهای بالاتر از 1024 را جدا کنیم:
ports = [21, 22, 80, 443, 8080, 3306]
high_ports = filter(lambda port: port > 1024, ports)
print(list(high_ports))
خروجی:
[8080, 3306]
حالا با map() میتوانیم پورتها را به رشته تبدیل کنیم:
ports = [22, 80, 443]
result = map(lambda port: f"Port: {port}", ports)
print(list(result))
خروجی:
['Port: 22', 'Port: 80', 'Port: 443']
اینها مثالهای سادهای از پردازش دادهها در اسکریپتهای شبکه هستند.
🐍 فصل یازدهم — پایتون مقدماتی Modules
—————————————-
Modules | ماژولها و کتابخانهها
توی این فصل یاد میگیریم چطور از کدهایی که دیگران نوشتهاند استفاده کنیم و چطور کدهای خودمون رو در فایلهای جداگانه قرار بدیم تا بتونیم در پروژههای مختلف ازشون استفاده کنیم.
۱. ماژول (Module) چیست؟
ماژول در پایتون، بهطور ساده، یک فایل پایتون با پسوند
مثلاً فرض کن یک تابع برای ضرب دو عدد نوشتیم. بهجای اینکه هر بار این تابع رو در برنامههای مختلف بنویسیم، میتونیم اون رو داخل یک فایل قرار بدیم و هر جا خواستیم ازش استفاده کنیم.
مثال:
فایل
حالا در یک فایل پایتون دیگه، مثلاً
خروجی:
نکته: برای اینکه پایتون فایل
——————-
۲. کتابخانه (Library) چیست؟
کتابخانه مجموعهای از کدهای آماده است که برای انجام کارهای مشخصی در اختیار برنامهنویس قرار میگیره.
کتابخانهها میتونن شامل چندین ماژول و بخش مختلف باشن.
برای مثال، پایتون ابزارهای آماده زیادی برای کار با تاریخ، ریاضیات، فایلها و شبکه در اختیارمون قرار میده.
——————-
۳. استفاده از ماژولهای آماده با
برای استفاده از یک ماژول، از دستور
مثال اول: ماژول math
ماژول
خروجی:
توضیح:
چرا نوشتیم
چون تابع
———————
۴. کار با ماژول datetime
ماژول
مثال:
خروجی نمونه:
دقت کن که در کد جزوه،
اینجا:
——————-
۵. تغییر نام ماژول با
گاهی اسم یک ماژول طولانیه یا میخوایم در کد کوتاهتر بنویسیم.
برای این کار از
در این مثال، بهجای نوشتن
مثال دیگر:
خروجی:
—————
۶. وارد کردن یک تابع مشخص از ماژول
فرض کن فقط به تابع
میتونیم فقط همون تابع رو وارد کنیم:
خروجی:
در این حالت دیگه نیازی نیست بنویسیم:
چون تابع
وارد کردن چند تابع مشخص
—————
۷. استفاده از
این دستور همه نامهایی رو که ماژول برای وارد کردن در دسترس قرار داده، وارد فضای نام فعلی برنامه میکنه.
اما استفاده از
روشهای زیر معمولاً خواناتر هستن:
یا:
————————
۸. مثال عملی — ساخت ماژول شخصی
فرض کن میخوایم چند تابع ریاضی بسازیم و در برنامههای مختلف ازشون استفاده کنیم.
فایل اول:
فایل دوم:
حالا میتونیم کل ماژول رو وارد کنیم:
خروجی:
یا فقط تابع موردنیاز رو وارد کنیم:
خروجی:
نکته: هر دو فایل
—————————
—————————————-
Modules | ماژولها و کتابخانهها
توی این فصل یاد میگیریم چطور از کدهایی که دیگران نوشتهاند استفاده کنیم و چطور کدهای خودمون رو در فایلهای جداگانه قرار بدیم تا بتونیم در پروژههای مختلف ازشون استفاده کنیم.
۱. ماژول (Module) چیست؟
ماژول در پایتون، بهطور ساده، یک فایل پایتون با پسوند
.py است که میتونه شامل متغیر، تابع و کلاس باشه.مثلاً فرض کن یک تابع برای ضرب دو عدد نوشتیم. بهجای اینکه هر بار این تابع رو در برنامههای مختلف بنویسیم، میتونیم اون رو داخل یک فایل قرار بدیم و هر جا خواستیم ازش استفاده کنیم.
مثال:
فایل
mymath.py:def multiply(a, b):
return a * b
حالا در یک فایل پایتون دیگه، مثلاً
main.py، میتونیم از ماژول خودمون استفاده کنیم:import mymath
result1 = mymath.multiply(3, 4)
print(result1)
خروجی:
12
نکته: برای اینکه پایتون فایل
mymath.py رو پیدا کنه، معمولاً باید در مسیر قابلدسترسی برای پایتون، مثل پوشه فعلی پروژه، قرار داشته باشه.——————-
۲. کتابخانه (Library) چیست؟
کتابخانه مجموعهای از کدهای آماده است که برای انجام کارهای مشخصی در اختیار برنامهنویس قرار میگیره.
کتابخانهها میتونن شامل چندین ماژول و بخش مختلف باشن.
برای مثال، پایتون ابزارهای آماده زیادی برای کار با تاریخ، ریاضیات، فایلها و شبکه در اختیارمون قرار میده.
——————-
۳. استفاده از ماژولهای آماده با
importبرای استفاده از یک ماژول، از دستور
import استفاده میکنیم.مثال اول: ماژول math
ماژول
math توابع و مقادیر ریاضی آمادهای داره.import math
print(math.sqrt(25))
print(math.pi)
خروجی:
5.0
3.141592653589793
توضیح:
math.sqrt(25) جذر ۲۵ رو محاسبه میکنه.math.pi مقدار تقریبی عدد پی رو برمیگردونه.چرا نوشتیم
math.sqrt؟چون تابع
sqrt داخل ماژول math قرار داره.———————
۴. کار با ماژول datetime
ماژول
datetime برای کار با تاریخ و زمان استفاده میشه.مثال:
import datetime
today = datetime.date.today()
print(today)
خروجی نمونه:
2026-09-21
دقت کن که در کد جزوه،
tody() اشتباه تایپی بود و شکل صحیحش today() هست.اینجا:
datetime ماژول ماست.date برای کار با تاریخ استفاده میشه.today() تاریخ امروز رو برمیگردونه.——————-
۵. تغییر نام ماژول با
asگاهی اسم یک ماژول طولانیه یا میخوایم در کد کوتاهتر بنویسیم.
برای این کار از
as استفاده میکنیم.import datetime as dt
today = dt.date.today()
print(today)
در این مثال، بهجای نوشتن
datetime، از اسم کوتاهتر dt استفاده میکنیم.مثال دیگر:
import math as m
print(m.sqrt(36))
خروجی:
6.0
—————
۶. وارد کردن یک تابع مشخص از ماژول
فرض کن فقط به تابع
sqrt از ماژول math نیاز داریم.میتونیم فقط همون تابع رو وارد کنیم:
from math import sqrt
print(sqrt(49))
خروجی:
7.0
در این حالت دیگه نیازی نیست بنویسیم:
math.sqrt(49)
چون تابع
sqrt رو مستقیماً وارد کردیم.وارد کردن چند تابع مشخص
from math import sqrt, pi
print(sqrt(64))
print(pi)
—————
۷. استفاده از
from module import *این دستور همه نامهایی رو که ماژول برای وارد کردن در دسترس قرار داده، وارد فضای نام فعلی برنامه میکنه.
from math import *
print(sqrt(81))
print(pi)
اما استفاده از
import * معمولاً پیشنهاد نمیشه؛ چون ممکنه نام توابع یا متغیرها با هم تداخل پیدا کنه و مشخص نباشه هر تابع از کجا اومده.روشهای زیر معمولاً خواناتر هستن:
import math
یا:
from math import sqrt
————————
۸. مثال عملی — ساخت ماژول شخصی
فرض کن میخوایم چند تابع ریاضی بسازیم و در برنامههای مختلف ازشون استفاده کنیم.
فایل اول:
mymath.pydef add(a, b):
return a + b
def multiply(a, b):
return a * b
def subtract(a, b):
return a - b
فایل دوم:
main.pyحالا میتونیم کل ماژول رو وارد کنیم:
import mymath
print(mymath.add(10, 5))
print(mymath.multiply(3, 4))
خروجی:
15
12
یا فقط تابع موردنیاز رو وارد کنیم:
from mymath import add
print(add(10, 5))
خروجی:
15
نکته: هر دو فایل
mymath.py و main.py رو در یک پوشه قرار بده تا این مثال بهسادگی اجرا بشه.—————————
My folder vip
🐍 فصل یازدهم — پایتون مقدماتی Modules —————————————- Modules | ماژولها و کتابخانهها توی این فصل یاد میگیریم چطور از کدهایی که دیگران نوشتهاند استفاده کنیم و چطور کدهای خودمون رو در فایلهای جداگانه قرار بدیم تا بتونیم در پروژههای مختلف ازشون استفاده…
ارتباط ماژولها با امنیت و شبکه
ماژولها کمک میکنن کدهای امنیتی و شبکهای خودمون رو مرتب و قابل استفاده مجدد بنویسیم.
برای مثال، ماژول
خروجی:
این کد مشخص میکنه آدرس واردشده از نوع IPv4 هست.
در پروژههای بزرگتر، میتونیم توابع مربوط به اسکن شبکه، پردازش لاگها یا اعتبارسنجی IP رو در ماژولهای جداگانه قرار بدیم و در برنامه اصلی ازشون استفاده کنیم.
ماژولها کمک میکنن کدهای امنیتی و شبکهای خودمون رو مرتب و قابل استفاده مجدد بنویسیم.
برای مثال، ماژول
ipaddress در پایتون برای کار با آدرسهای IP و شبکهها استفاده میشه:import ipaddress
ip = ipaddress.ip_address("192.168.1.10")
print(ip.version)
خروجی:
4
این کد مشخص میکنه آدرس واردشده از نوع IPv4 هست.
در پروژههای بزرگتر، میتونیم توابع مربوط به اسکن شبکه، پردازش لاگها یا اعتبارسنجی IP رو در ماژولهای جداگانه قرار بدیم و در برنامه اصلی ازشون استفاده کنیم.
🐍 فصل دوازدهم — پایتون مقدماتی Work With Files
—————————————-
توی این فصل یاد میگیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو بهدرستی ببندیم.
مثلاً فرض کن میخوایم با پایتون یک فایل لاگ برای ثبت رویدادهای یک سرور ایجاد کنیم؛ اینجا کار با فایلها به دردمون میخوره.
————————-
۱. باز کردن فایل با
برای باز کردن یک فایل در پایتون از تابع
در این مثال:
————————
حالتهای مهم باز کردن فایل
حالت
کاربرد
خواندن فایل؛ فایل باید از قبل وجود داشته باشه
نوشتن؛ اگر فایل وجود نداشته باشه ساخته میشه، اگر وجود داشته باشه محتویات قبلی پاک میشه
اضافه کردن محتوا به انتهای فایل، بدون پاک کردن محتوای قبلی
حالت باینری؛ معمولاً همراه حالتهای دیگه استفاده میشه
ایجاد فایل جدید؛ اگر فایل از قبل وجود داشته باشه خطا میده
مثلاً:
اینجا فایل تصویری رو در حالت خواندن باینری باز میکنیم.
نکته:
———————
۲. خواندن اطلاعات فایل با
فرض کنیم فایل
برای خوندن کل محتویات فایل:
خروجی:
تابع
خواندن تعداد مشخصی از کاراکترها
خروجی:
عدد
——————————-
۳. بستن فایل با
بعد از کار با فایل، باید اون رو ببندیم:
چرا؟
چون فایل باز، منابع سیستم رو درگیر میکنه و بستن اون باعث میشه منابع آزاد بشن.
اما یک روش بهتر و حرفهایتر هم وجود داره که جلوتر میبینیم.
——————
۴. خواندن فایل خطبهخط با
روش اول: استفاده از
متد
هر بار که
روش دوم: استفاده از
متد
خروجی نمونه:
دقت کن که
روش سوم: استفاده از حلقه
برای خواندن فایل خطبهخط، میتونیم مستقیماً روی فایل حلقه بزنیم:
اینجا پایتون هر بار یک خط از فایل رو به متغیر
اصلاح نکته جزوه: این کد:
درست نیست؛ چون
———————
۵. متد
وقتی از فایل خط میخونیم، ممکنه انتهای هر خط کاراکتر
برای حذف فاصلهها و کاراکترهای خالی ابتدا و انتهای رشته از
خروجی:
نکته مهم:
نه:
حالت دوم فقط به خود متد اشاره میکنه و اون رو اجرا نمیکنه.
———————-
۶. نوشتن داخل فایل با
برای نوشتن در فایل از حالت
اگر فایل وجود نداشته باشه، ساخته میشه.
اگر از قبل وجود داشته باشه، محتویات قبلی اون پاک میشه و اطلاعات جدید نوشته میشه.
نوشتن چند خط در فایل
محتوای فایل:
_————————
۷. اضافه کردن محتوا به انتهای فایل با
فرض کن داخل فایل
در این حالت از
این دستور، متن
تفاوت مهم:
——————————
۸. روش حرفهای باز کردن فایل با
در پایتون، استفاده از
دیگه نیازی به نوشتن
مثال نوشتن با
بعد از خروج از بلوک
—————————————-
توی این فصل یاد میگیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو بهدرستی ببندیم.
مثلاً فرض کن میخوایم با پایتون یک فایل لاگ برای ثبت رویدادهای یک سرور ایجاد کنیم؛ اینجا کار با فایلها به دردمون میخوره.
————————-
۱. باز کردن فایل با
open()برای باز کردن یک فایل در پایتون از تابع
open() استفاده میکنیم.file = open("ali.txt", "r")در این مثال:
open() فایل رو باز میکنه.ali.txt اسم فایله."r" حالت باز کردن فایل برای خواندنه (Read).————————
حالتهای مهم باز کردن فایل
حالت
کاربرد
"r"خواندن فایل؛ فایل باید از قبل وجود داشته باشه
"w"نوشتن؛ اگر فایل وجود نداشته باشه ساخته میشه، اگر وجود داشته باشه محتویات قبلی پاک میشه
"a"اضافه کردن محتوا به انتهای فایل، بدون پاک کردن محتوای قبلی
"b"حالت باینری؛ معمولاً همراه حالتهای دیگه استفاده میشه
"x"ایجاد فایل جدید؛ اگر فایل از قبل وجود داشته باشه خطا میده
مثلاً:
file = open("image.jpg", "rb")اینجا فایل تصویری رو در حالت خواندن باینری باز میکنیم.
نکته:
"b" بهتنهایی معمولاً حالت کاملی برای باز کردن فایل نیست؛ معمولاً با "r" یا "w" ترکیب میشه، مثل "rb" و "wb".———————
۲. خواندن اطلاعات فایل با
read()فرض کنیم فایل
ali.txt این محتوا رو داره:Hello Ali
Welcome to Python
برای خوندن کل محتویات فایل:
file = open("ali.txt", "r")
content = file.read()
print(content)
file.close()خروجی:
Hello Ali
Welcome to Python
تابع
read() محتوای فایل رو میخونه و بهصورت رشته (str) برمیگردونه.خواندن تعداد مشخصی از کاراکترها
file = open("ali.txt", "r")
content = file.read(5)
print(content)
file.close()خروجی:
Hello
عدد
5 یعنی پنج کاراکتر اول فایل خونده بشه.——————————-
۳. بستن فایل با
close()بعد از کار با فایل، باید اون رو ببندیم:
file.close()
چرا؟
چون فایل باز، منابع سیستم رو درگیر میکنه و بستن اون باعث میشه منابع آزاد بشن.
اما یک روش بهتر و حرفهایتر هم وجود داره که جلوتر میبینیم.
——————
۴. خواندن فایل خطبهخط با
readline() و readlines()روش اول: استفاده از
readline()متد
readline() هر بار یک خط از فایل رو میخونه.file = open("ali.txt", "r")
line1 = file.readline()
line2 = file.readline()
print(line1)
print(line2)
file.close()هر بار که
readline() اجرا میشه، به خط بعدی میره.روش دوم: استفاده از
readlines()متد
readlines() تمام خطوط فایل رو میخونه و به شکل یک لیست برمیگردونه.file = open("ali.txt", "r")
lines = file.readlines()
print(lines)
file.close()خروجی نمونه:
['Hello Ali\n', 'Welcome to Python\n']
دقت کن که
\n نشاندهنده کاراکتر رفتن به خط بعدیه.روش سوم: استفاده از حلقه
for (پیشنهادی)برای خواندن فایل خطبهخط، میتونیم مستقیماً روی فایل حلقه بزنیم:
file = open("ali.txt", "r")
for line in file:
print(line.strip())
file.close()اینجا پایتون هر بار یک خط از فایل رو به متغیر
line میده.اصلاح نکته جزوه: این کد:
for line in content.readline():
درست نیست؛ چون
content معمولاً خروجی read() و یک رشته است و readline() متد فایل محسوب میشه. برای خواندن خطبهخط، از for line in file: یا file.readlines() استفاده کن.———————
۵. متد
strip() چیست؟وقتی از فایل خط میخونیم، ممکنه انتهای هر خط کاراکتر
\n وجود داشته باشه.برای حذف فاصلهها و کاراکترهای خالی ابتدا و انتهای رشته از
strip() استفاده میکنیم:text = " Hello Ali\n"
print(text.strip())
خروجی:
Hello Ali
نکته مهم:
strip() فقط وقتی اجرا بشه که با پرانتز نوشته شده باشه.line.strip()
نه:
line.strip
حالت دوم فقط به خود متد اشاره میکنه و اون رو اجرا نمیکنه.
———————-
۶. نوشتن داخل فایل با
write()برای نوشتن در فایل از حالت
"w" استفاده میکنیم.file = open("ali.txt", "w")
file.write("Hi")
file.close()اگر فایل وجود نداشته باشه، ساخته میشه.
اگر از قبل وجود داشته باشه، محتویات قبلی اون پاک میشه و اطلاعات جدید نوشته میشه.
نوشتن چند خط در فایل
file = open("ali.txt", "w")
file.write("Hello Ali\n")
file.write("Welcome to Python\n")
file.write("End")
file.close()محتوای فایل:
Hello Ali
Welcome to Python
End
\n باعث میشه متن بعدی از خط جدید شروع بشه._————————
۷. اضافه کردن محتوا به انتهای فایل با
aفرض کن داخل فایل
ali.txt از قبل اطلاعاتی داریم و نمیخوایم پاک بشن.در این حالت از
"a" (Append) استفاده میکنیم:file = open("ali.txt", "a")
file.write("\nEnd\n")
file.close()این دستور، متن
End رو به انتهای فایل اضافه میکنه.تفاوت مهم:
"w" محتویات قبلی رو پاک میکنه و از اول مینویسه."a" محتوای جدید رو به انتهای فایل اضافه میکنه.——————————
۸. روش حرفهای باز کردن فایل با
withدر پایتون، استفاده از
with open() روش پیشنهادی برای کار با فایله؛ چون بعد از پایان بلوک، فایل بهصورت خودکار بسته میشه.with open("ali.txt", "r") as file:
content = file.read()
print(content)دیگه نیازی به نوشتن
file.close() نیست.مثال نوشتن با
withwith open("ali.txt", "w") as file:
file.write("Hello Ali\n")
file.write("Python is great")بعد از خروج از بلوک
with، فایل بهصورت خودکار بسته میشه.
My folder vip
🐍 فصل دوازدهم — پایتون مقدماتی Work With Files —————————————- توی این فصل یاد میگیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو بهدرستی ببندیم. مثلاً فرض کن میخوایم با پایتون یک فایل لاگ برای ثبت رویدادهای…
۹. مثال کاربردی امنیتی — ثبت لاگ
فرض کن میخوایم نتیجه یک بررسی امنیتی رو داخل فایل ثبت کنیم.
هر بار که این کد اجرا بشه، پیام جدید به انتهای فایل
این روش میتونه برای ذخیره رویدادهای برنامه، خطاها یا نتایج بررسیهای امنیتی استفاده بشه.
فرض کن میخوایم نتیجه یک بررسی امنیتی رو داخل فایل ثبت کنیم.
with open("security.log", "a") as file:
file.write("Login attempt detected\n")هر بار که این کد اجرا بشه، پیام جدید به انتهای فایل
security.log اضافه میشه.این روش میتونه برای ذخیره رویدادهای برنامه، خطاها یا نتایج بررسیهای امنیتی استفاده بشه.
🐍 فصل سیزدهم — پایتون مقدماتی Error Handling
—————————————-
رسیدیم به یکی از مباحث مهم پایتون که هم در برنامهنویسی روزمره و هم در توسعه ابزارهای امنیتی خیلی کاربرد داره.
فرض کن کاربر باید یک عدد وارد کنه، اما بهجای عدد، حروف وارد میکنه. اگر برنامه ما مدیریت خطا نداشته باشه، ممکنه متوقف بشه و یک پیام خطای فنی نمایش بده.
با Error Handling میتونیم خطاهای قابلپیشبینی رو مدیریت کنیم تا برنامه بهجای متوقف شدن ناگهانی، رفتار مناسبی داشته باشه.
——————-
۱. خطا (Error / Exception) چیست؟
هنگام اجرای برنامه ممکنه اتفاقی بیفته که اجرای عادی برنامه رو مختل کنه.
مثلاً:
این برنامه دو مشکل احتمالی داره:
اگر کاربر بهجای عدد، متن وارد کنه، با
اگر کاربر عدد صفر وارد کنه، با
در حالت عادی، این خطاها میتونن اجرای برنامه رو متوقف کنن.
————————
۲. دستور try و except
برای مدیریت خطاها از
ساختار کلی:
یعنی پایتون کد داخل
مثال ساده
حالا اگر کاربر ورودی نامعتبر وارد کنه یا عدد صفر بده، برنامه بهجای نمایش خطای خام، پیام خودمون رو نمایش میده.
اما یک نکته مهم: استفاده از
————————-
۳. مدیریت ValueError
خطای
مثلاً:
پایتون نمیتونه رشته
مثال کاربردی
اگر کاربر بهجای عدد، مثلاً
در این مثال، خطای
—————————
۴. مدیریت چند خطای مختلف
میتونیم برای هر نوع خطا، پیام جداگانهای نمایش بدیم.
—————————
۶. مدیریت خطای FileNotFoundError
فرض کن برنامه ما میخواد یک فایل رو بخونه، اما فایل وجود نداره.
اگر فایل
روش بهتر، استفاده از
——————
۷. استفاده از else و finally
علاوه بر
بخش else
بخش
بخش finally
بخش
—————————————-
رسیدیم به یکی از مباحث مهم پایتون که هم در برنامهنویسی روزمره و هم در توسعه ابزارهای امنیتی خیلی کاربرد داره.
فرض کن کاربر باید یک عدد وارد کنه، اما بهجای عدد، حروف وارد میکنه. اگر برنامه ما مدیریت خطا نداشته باشه، ممکنه متوقف بشه و یک پیام خطای فنی نمایش بده.
با Error Handling میتونیم خطاهای قابلپیشبینی رو مدیریت کنیم تا برنامه بهجای متوقف شدن ناگهانی، رفتار مناسبی داشته باشه.
——————-
۱. خطا (Error / Exception) چیست؟
هنگام اجرای برنامه ممکنه اتفاقی بیفته که اجرای عادی برنامه رو مختل کنه.
مثلاً:
number = int(input("Enter a number: "))
result = 100 / number
print(result)این برنامه دو مشکل احتمالی داره:
اگر کاربر بهجای عدد، متن وارد کنه، با
ValueError مواجه میشیم.اگر کاربر عدد صفر وارد کنه، با
ZeroDivisionError مواجه میشیم.در حالت عادی، این خطاها میتونن اجرای برنامه رو متوقف کنن.
————————
۲. دستور try و except
برای مدیریت خطاها از
try و except استفاده میکنیم.ساختار کلی:
try:
# کدی که ممکن است خطا ایجاد کند
except:
# کدی که هنگام بروز خطا اجرا میشود
یعنی پایتون کد داخل
try رو اجرا میکنه. اگر خطایی رخ بده که با except مطابقت داشته باشه، وارد بخش except میشه.مثال ساده
try:
number = int(input("Enter a number: "))
result = 100 / number
print(result)
except:
print("An error occurred!")
حالا اگر کاربر ورودی نامعتبر وارد کنه یا عدد صفر بده، برنامه بهجای نمایش خطای خام، پیام خودمون رو نمایش میده.
اما یک نکته مهم: استفاده از
except خالی معمولاً پیشنهاد نمیشه؛ چون ممکنه خطاهای غیرمنتظره رو هم پنهان کنه. بهتره خطاهای مشخص رو مدیریت کنیم.————————-
۳. مدیریت ValueError
خطای
ValueError زمانی رخ میده که نوع داده از نظر کلی قابلقبوله، اما مقدار ارائهشده برای عملیات موردنظر معتبر نیست.مثلاً:
number = int("hello")پایتون نمیتونه رشته
"hello" رو به عدد صحیح تبدیل کنه؛ بنابراین ValueError ایجاد میشه.مثال کاربردی
try:
number = int(input("Enter a number: "))
result = 100 / number
print(result)
except ValueError:
print("Lotfan adad vared konid!")
اگر کاربر بهجای عدد، مثلاً
hello وارد کنه، پیام زیر نمایش داده میشه:Lotfan adad vared konid!
در این مثال، خطای
ValueError مدیریت میشه؛ اما اگر کاربر صفر وارد کنه، همچنان ZeroDivisionError رخ میده.—————————
۴. مدیریت چند خطای مختلف
میتونیم برای هر نوع خطا، پیام جداگانهای نمایش بدیم.
try:
number = int(input("Enter a number: "))
result = 100 / number
print(result)
except ValueError:
print("Lotfan adad sahih vared konid!")
except ZeroDivisionError:
print("Adad nemitavanad sefr bashad!")
—————————
۶. مدیریت خطای FileNotFoundError
فرض کن برنامه ما میخواد یک فایل رو بخونه، اما فایل وجود نداره.
try:
file = open("data.txt", "r")
content = file.read()
print(content)
file.close()
except FileNotFoundError:
print("File not found!")
اگر فایل
data.txt وجود نداشته باشه، بهجای نمایش خطای خام، پیام مناسب نمایش داده میشه.روش بهتر، استفاده از
with هست تا فایل بهصورت خودکار بسته بشه:try:
with open("data.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("File not found!")
——————
۷. استفاده از else و finally
علاوه بر
try و except، دو بخش دیگه هم داریم.بخش else
بخش
else زمانی اجرا میشه که داخل try هیچ خطایی رخ نداده باشه.try:
number = int(input("Enter a number: "))
except ValueError:
print("Invalid input!")
else:
print("Your number is:", number)
بخش finally
بخش
finally در پایان اجرای ساختار مدیریت خطا اجرا میشه؛ چه خطا رخ داده باشه، چه رخ نداده باشه.try:
number = int(input("Enter a number: "))
except ValueError:
print("Invalid input!")
finally:
print("Program finished!")
finally برای کارهایی مثل آزادسازی منابع یا پاکسازی وضعیت برنامه کاربرد داره.
My folder vip
🐍 فصل سیزدهم — پایتون مقدماتی Error Handling —————————————- رسیدیم به یکی از مباحث مهم پایتون که هم در برنامهنویسی روزمره و هم در توسعه ابزارهای امنیتی خیلی کاربرد داره. فرض کن کاربر باید یک عدد وارد کنه، اما بهجای عدد، حروف وارد میکنه. اگر برنامه…
نکته امنیتی مهم 🔐
درسته که مدیریت خطا میتونه از نمایش جزئیات فنی ناخواسته به کاربر جلوگیری کنه؛ اما پنهان کردن خطا بهتنهایی به معنی امن شدن برنامه نیست.
برای مثال، در یک برنامه تحت وب، نمایش جزئیات خطا مثل مسیرهای داخلی سرور، اطلاعات اتصال دیتابیس یا Stack Trace ممکنه اطلاعات غیرضروری در اختیار مهاجم قرار بده.
روش اصولی:
به کاربر پیام ساده و غیرحساس نمایش بده.
خطای فنی رو در لاگ داخلی ثبت کن.
اطلاعات محرمانه مثل رمز عبور، توکن و کلیدهای API رو در لاگ ذخیره نکن.
خطاهای مشخص رو مدیریت کن؛ از
مثلاً:
این روش هم تجربه کاربر رو بهتر میکنه و هم از پنهان شدن ناخواسته خطاهای غیرمنتظره جلوگیری میکنه.
درسته که مدیریت خطا میتونه از نمایش جزئیات فنی ناخواسته به کاربر جلوگیری کنه؛ اما پنهان کردن خطا بهتنهایی به معنی امن شدن برنامه نیست.
برای مثال، در یک برنامه تحت وب، نمایش جزئیات خطا مثل مسیرهای داخلی سرور، اطلاعات اتصال دیتابیس یا Stack Trace ممکنه اطلاعات غیرضروری در اختیار مهاجم قرار بده.
روش اصولی:
به کاربر پیام ساده و غیرحساس نمایش بده.
خطای فنی رو در لاگ داخلی ثبت کن.
اطلاعات محرمانه مثل رمز عبور، توکن و کلیدهای API رو در لاگ ذخیره نکن.
خطاهای مشخص رو مدیریت کن؛ از
except خالی برای پنهان کردن همه خطاها استفاده نکن.مثلاً:
try:
number = int(input("Enter a number: "))
result = 100 / number
except ValueError:
print("Please enter a valid number.")
except ZeroDivisionError:
print("Number cannot be zero.")
این روش هم تجربه کاربر رو بهتر میکنه و هم از پنهان شدن ناخواسته خطاهای غیرمنتظره جلوگیری میکنه.
🐍 فصل چهاردهم — پایتون مقدماتی OOP
—————————————-
برنامهنویسی شیگرا
رسیدیم به یکی از مفاهیم مهم برنامهنویسی پایتون! 😎
برنامهنویسی شیگرا (OOP) روشی برای طراحی برنامه است که در اون کدها رو بر اساس کلاسها (Class) و اشیا (Object) سازماندهی میکنیم.
برای اینکه بهتر متوجه بشی، مثال رو با موضوعی مرتبط با شبکه و امنیت پیش میبریم.
———————————
۱. برنامهنویسی شیگرا (OOP) چیست؟
فرض کن میخوایم یک برنامه برای مدیریت سرورها بنویسیم.
هر سرور میتونه ویژگیهایی داشته باشه، مثل:
نام سرور
آدرس IP
سیستمعامل
همچنین میتونه کارهایی انجام بده، مثل:
نمایش اطلاعات سرور
روشن یا خاموش شدن
بررسی وضعیت
در OOP، ما این ویژگیها و رفتارها رو داخل یک ساختار به نام Class قرار میدیم.
————————
۲. کلاس (Class) چیست؟
کلاس مثل یک نقشه یا قالب برای ساخت اشیاست.
مثلاً نقشه یک خودرو مشخص میکنه خودرو چه ویژگیهایی داره؛ اما خود نقشه، یک خودرو واقعی نیست.
در پایتون هم کلاس مشخص میکنه اشیایی که از اون ساخته میشن چه ویژگیها و رفتارهایی داشته باشن.
مثال: ساخت کلاس Server
بیا قسمتهای مختلف رو بررسی کنیم.
با کلمه کلیدی
این کلاس قالبی برای ساخت اشیای سرور خواهد بود.
این متد هنگام ساخت یک شیء جدید اجرا میشه و معمولاً برای مقداردهی اولیه ویژگیهای اون استفاده میشه.
مثلاً وقتی یک سرور میسازیم، میتونیم نام، IP و سیستمعاملش رو مشخص کنیم.
کلمه
مثلاً:
یعنی مقدار
این یک متد (Method) است؛ یعنی تابعی که داخل کلاس تعریف شده و اطلاعات سرور رو نمایش میده.
———————-
۳. شیء (Object) و اینستنس (Instance) چیست؟
وقتی از روی یک کلاس، یک شیء واقعی میسازیم، به اون شیء یک Instance از کلاس میگیم.
به زبان ساده:
Class = قالب یا نقشه
Object / Instance = نمونه ساختهشده از روی قالب
حالا از کلاس
در اینجا:
هر Instance ویژگیهای خودش رو داره.
برای مثال:
خروجی:
میتونیم متد کلاس رو هم اجرا کنیم:
خروجی:
نکته: در پایتون، ساخت شیء از روی کلاس رو معمولاً Instantiation میگن.
——————-
۴. ارثبری (Inheritance) چیست؟
ارثبری یکی از قابلیتهای مهم OOP است.
با استفاده از Inheritance میتونیم یک کلاس جدید بسازیم که ویژگیها و متدهای کلاس دیگهای رو به ارث ببره.
مثلاً فرض کن کلاس
LinuxServer
WindowsServer
هر دو سرور ویژگیهای عمومی مثل نام، IP و سیستمعامل دارن؛ پس لازم نیست همه کدها رو از اول بنویسیم.
میتونیم از کلاس
در این حالت:
————————
—————————————-
برنامهنویسی شیگرا
رسیدیم به یکی از مفاهیم مهم برنامهنویسی پایتون! 😎
برنامهنویسی شیگرا (OOP) روشی برای طراحی برنامه است که در اون کدها رو بر اساس کلاسها (Class) و اشیا (Object) سازماندهی میکنیم.
برای اینکه بهتر متوجه بشی، مثال رو با موضوعی مرتبط با شبکه و امنیت پیش میبریم.
———————————
۱. برنامهنویسی شیگرا (OOP) چیست؟
فرض کن میخوایم یک برنامه برای مدیریت سرورها بنویسیم.
هر سرور میتونه ویژگیهایی داشته باشه، مثل:
نام سرور
آدرس IP
سیستمعامل
همچنین میتونه کارهایی انجام بده، مثل:
نمایش اطلاعات سرور
روشن یا خاموش شدن
بررسی وضعیت
در OOP، ما این ویژگیها و رفتارها رو داخل یک ساختار به نام Class قرار میدیم.
————————
۲. کلاس (Class) چیست؟
کلاس مثل یک نقشه یا قالب برای ساخت اشیاست.
مثلاً نقشه یک خودرو مشخص میکنه خودرو چه ویژگیهایی داره؛ اما خود نقشه، یک خودرو واقعی نیست.
در پایتون هم کلاس مشخص میکنه اشیایی که از اون ساخته میشن چه ویژگیها و رفتارهایی داشته باشن.
مثال: ساخت کلاس Server
class Server:
def __init__(self, name, ip, os):
self.name = name
self.ip = ip
self.os = os
def show_info(self):
print(f"Server: {self.name}")
print(f"IP: {self.ip}")
print(f"OS: {self.os}")
بیا قسمتهای مختلف رو بررسی کنیم.
class Server:با کلمه کلیدی
class یک کلاس به نام Server تعریف میکنیم.این کلاس قالبی برای ساخت اشیای سرور خواهد بود.
__init__()این متد هنگام ساخت یک شیء جدید اجرا میشه و معمولاً برای مقداردهی اولیه ویژگیهای اون استفاده میشه.
مثلاً وقتی یک سرور میسازیم، میتونیم نام، IP و سیستمعاملش رو مشخص کنیم.
selfکلمه
self به شیء فعلی اشاره میکنه.مثلاً:
self.name = name
یعنی مقدار
name رو داخل ویژگی name همین شیء ذخیره کن.show_info()این یک متد (Method) است؛ یعنی تابعی که داخل کلاس تعریف شده و اطلاعات سرور رو نمایش میده.
———————-
۳. شیء (Object) و اینستنس (Instance) چیست؟
وقتی از روی یک کلاس، یک شیء واقعی میسازیم، به اون شیء یک Instance از کلاس میگیم.
به زبان ساده:
Class = قالب یا نقشه
Object / Instance = نمونه ساختهشده از روی قالب
حالا از کلاس
Server دو سرور مختلف میسازیم:server1 = Server("Web-Server", "192.168.1.10", "Ubuntu")
server2 = Server("DB-Server", "192.168.1.20", "Windows")در اینجا:
Server کلاس ماست.server1 یک Instance از کلاس Server است.server2 هم یک Instance دیگر از همون کلاس است.هر Instance ویژگیهای خودش رو داره.
برای مثال:
print(server1.name)
print(server2.name)
خروجی:
Web-Server
DB-Server
میتونیم متد کلاس رو هم اجرا کنیم:
server1.show_info()
خروجی:
Server: Web-Server
IP: 192.168.1.10
OS: Ubuntu
نکته: در پایتون، ساخت شیء از روی کلاس رو معمولاً Instantiation میگن.
——————-
۴. ارثبری (Inheritance) چیست؟
ارثبری یکی از قابلیتهای مهم OOP است.
با استفاده از Inheritance میتونیم یک کلاس جدید بسازیم که ویژگیها و متدهای کلاس دیگهای رو به ارث ببره.
مثلاً فرض کن کلاس
Server رو داریم؛ حالا میخوایم دو نوع سرور تعریف کنیم:LinuxServer
WindowsServer
هر دو سرور ویژگیهای عمومی مثل نام، IP و سیستمعامل دارن؛ پس لازم نیست همه کدها رو از اول بنویسیم.
میتونیم از کلاس
Server ارثبری کنیم.در این حالت:
Server = کلاس والد (Parent / Base Class)LinuxServer = کلاس فرزند (Child / Derived Class)WindowsServer = کلاس فرزند (Child / Derived Class)————————
۵. مثال کامل ارثبری در پایتون
حالا از کلاس فرزند، یک Instance میسازیم:
خروجی:
این کد چطور کار میکنه؟
۱.
با قرار دادن نام کلاس والد داخل پرانتز، مشخص میکنیم که
۲.
با
در این مثال، متد
۳.
این ویژگی مخصوص کلاس فرزند است و توزیع لینوکس سرور رو ذخیره میکنه.
۴.
چون
پس لازم نیست اون متد رو دوباره بنویسیم!
——————
۶. چرا ارثبری مهم است؟
فرض کن برای هر نوع سرور، تمام ویژگیها و متدهای مشترک رو دوباره تعریف کنیم.
با زیاد شدن تعداد کلاسها، کدمون تکراری و نگهداریش سخت میشه.
Inheritance کمک میکنه:
کدهای مشترک رو فقط یک بار بنویسیم.
کلاسهای تخصصیتر بسازیم.
کدها رو مرتبتر و قابل نگهداریتر کنیم.
قابلیتهای کلاس والد رو در کلاس فرزند گسترش بدیم.
البته هر جا کلاسها رابطه منطقی والد و فرزندی ندارن، استفاده از ارثبری لزوماً انتخاب مناسبی نیست.
class Server:
def __init__(self, name, ip):
self.name = name
self.ip = ip
def show_info(self):
print(f"Name: {self.name}")
print(f"IP: {self.ip}")
class LinuxServer(Server):
def __init__(self, name, ip, distro):
super().__init__(name, ip)
self.distro = distro
def show_linux_info(self):
self.show_info()
print(f"Distro: {self.distro}")
حالا از کلاس فرزند، یک Instance میسازیم:
linux1 = LinuxServer(
"Web-Server",
"192.168.1.10",
"Ubuntu"
)
linux1.show_linux_info()
خروجی:
Name: Web-Server
IP: 192.168.1.10
Distro: Ubuntu
این کد چطور کار میکنه؟
۱.
class LinuxServer(Server):با قرار دادن نام کلاس والد داخل پرانتز، مشخص میکنیم که
LinuxServer از Server ارثبری میکنه.۲.
super().__init__(name, ip)با
super() به پیادهسازی کلاس والد دسترسی پیدا میکنیم.در این مثال، متد
__init__() کلاس Server رو اجرا میکنیم تا ویژگیهای name و ip مقداردهی بشن.۳.
self.distro = distroاین ویژگی مخصوص کلاس فرزند است و توزیع لینوکس سرور رو ذخیره میکنه.
۴.
self.show_info()چون
LinuxServer از Server ارثبری کرده، میتونه از متد show_info() کلاس والد استفاده کنه.پس لازم نیست اون متد رو دوباره بنویسیم!
——————
۶. چرا ارثبری مهم است؟
فرض کن برای هر نوع سرور، تمام ویژگیها و متدهای مشترک رو دوباره تعریف کنیم.
با زیاد شدن تعداد کلاسها، کدمون تکراری و نگهداریش سخت میشه.
Inheritance کمک میکنه:
کدهای مشترک رو فقط یک بار بنویسیم.
کلاسهای تخصصیتر بسازیم.
کدها رو مرتبتر و قابل نگهداریتر کنیم.
قابلیتهای کلاس والد رو در کلاس فرزند گسترش بدیم.
البته هر جا کلاسها رابطه منطقی والد و فرزندی ندارن، استفاده از ارثبری لزوماً انتخاب مناسبی نیست.
🐍 فصل پانزدهم — پایتون مقدماتی regex
—————————————-
خب رسیدیم به یکی از مباحث بسیار کاربردی پایتون، مخصوصاً برای امنیت شبکه، پنتست، تحلیل لاگ و پردازش دادهها. 🔐
فقط اول یک اصلاح مهم: Regex مربوط به رمزنگاری (Encryption) نیست. ریجکس ابزاری برای جستوجو، شناسایی و بررسی الگوهای متنیه.
——————————
۱. Regex چیست؟
Regex مخفف Regular Expression است.
به زبان ساده، Regex به ما اجازه میده داخل متن، دنبال یک الگوی مشخص بگردیم.
مثلاً فرض کن یک فایل لاگ داریم که داخلش هزاران خط اطلاعات وجود داره. میخوایم تمام آدرسهای IP یا ایمیلها رو از داخلش پیدا کنیم.
بهجای اینکه تکتک خطوط رو بررسی کنیم، با Regex میتونیم الگوی موردنظر رو مشخص کنیم و پایتون اون رو جستوجو کنه.
کاربردهای Regex
جستوجو در متن
اعتبارسنجی ایمیل و شماره تلفن
استخراج آدرسهای IP از لاگها
بررسی فرمت رمز عبور
پیدا کردن الگوهای مشکوک در لاگهای امنیتی
پردازش و پاکسازی دادههای متنی
در پایتون، ماژول داخلی
—————-
۲. جستوجو در متن با
متد
مثال جزوه
خروجی:
چرا؟
چون کلمه
مثال دوم
خروجی:
——————
۳. آشنایی با نمادهای مهم Regex
حالا بریم سراغ نمادهایی که در جزوهات نوشتی.
مثال:
خروجی:
اگر بخوایم اعداد چندرقمی رو یکجا پیدا کنیم:
خروجی:
—————-
مثال:
خروجی:
علامت
نکته: در پایتون،
—————————
علامت
اگر بخوایم خود علامت
خروجی:
نقطه (
مثال:
خروجی:
چون نقطه میتونه با کاراکتر
مثالهای دیگه:
اما
——————
مثال ترکیبی
خروجی:
چون تمام حروف و اعداد پشت سر هم، با الگوی
———————
۵. اعتبارسنجی ایمیل با Regex
حالا بریم سراغ مثال ایمیل که در جزوهات نوشتی.
هدف اینه که بررسی کنیم آیا ایمیل واردشده، با یک الگوی مشخص مطابقت داره یا نه.
نسخه اصلاحشده کد
مثال ورودی و خروجی
ورودی:
خروجی:
ورودی:
خروجی:
چون در ایمیل دوم علامت
——————-
—————————————-
خب رسیدیم به یکی از مباحث بسیار کاربردی پایتون، مخصوصاً برای امنیت شبکه، پنتست، تحلیل لاگ و پردازش دادهها. 🔐
فقط اول یک اصلاح مهم: Regex مربوط به رمزنگاری (Encryption) نیست. ریجکس ابزاری برای جستوجو، شناسایی و بررسی الگوهای متنیه.
——————————
۱. Regex چیست؟
Regex مخفف Regular Expression است.
به زبان ساده، Regex به ما اجازه میده داخل متن، دنبال یک الگوی مشخص بگردیم.
مثلاً فرض کن یک فایل لاگ داریم که داخلش هزاران خط اطلاعات وجود داره. میخوایم تمام آدرسهای IP یا ایمیلها رو از داخلش پیدا کنیم.
بهجای اینکه تکتک خطوط رو بررسی کنیم، با Regex میتونیم الگوی موردنظر رو مشخص کنیم و پایتون اون رو جستوجو کنه.
کاربردهای Regex
جستوجو در متن
اعتبارسنجی ایمیل و شماره تلفن
استخراج آدرسهای IP از لاگها
بررسی فرمت رمز عبور
پیدا کردن الگوهای مشکوک در لاگهای امنیتی
پردازش و پاکسازی دادههای متنی
در پایتون، ماژول داخلی
re برای کار با Regex استفاده میشه و نیازی به نصب جداگانه نداره.import re
—————-
۲. جستوجو در متن با
re.search()متد
re.search() در یک متن، دنبال اولین تطابق با الگوی مشخصشده میگرده.مثال جزوه
import re
text = "hi"
pattern = "rain"
match = re.search(pattern, text)
if match:
print("Find")
print(f"From character {match.start()} to {match.end()}")
else:
print("Not found")
خروجی:
Not found
چرا؟
چون کلمه
rain داخل متن hi وجود نداره.مثال دوم
import re
text = "Hello rain world"
pattern = "rain"
match = re.search(pattern, text)
if match:
print("Find")
print(f"From character {match.start()} to {match.end()}")
else:
print("Not found")
خروجی:
Find
From character 6 to 10
——————
۳. آشنایی با نمادهای مهم Regex
حالا بریم سراغ نمادهایی که در جزوهات نوشتی.
\d — پیدا کردن عدد\d هر رقم عددی رو شناسایی میکنه.مثال:
import re
text = "My age is 25"
result = re.findall(r"\d", text)
print(result)
خروجی:
['2', '5']
اگر بخوایم اعداد چندرقمی رو یکجا پیدا کنیم:
print(re.findall(r"\d+", text))
خروجی:
['25']
—————-
\w — کاراکترهای کلمهای\w معمولاً حروف، اعداد و زیرخط (_) رو شناسایی میکنه.مثال:
import re
text = "ali_123!"
result = re.findall(r"\w", text)
print(result)
خروجی:
['a', 'l', 'i', '_', '1', '2', '3']
علامت
! پیدا نمیشه؛ چون جزو کاراکترهای \w نیست.نکته: در پایتون،
\w بهصورت پیشفرض کاراکترهای حرفی Unicode، از جمله بسیاری از حروف فارسی، رو هم شامل میشه.—————————
\+ — پیدا کردن علامت + بهصورت واقعیعلامت
+ در Regex یک معنی ویژه داره؛ یعنی «یک یا چند بار تکرار».اگر بخوایم خود علامت
+ رو جستوجو کنیم، باید قبلش بکاسلش بذاریم:import re
text = "5+3"
result = re.search(r"\+", text)
if result:
print("Plus found")
خروجی:
Plus found
. — هر کاراکترنقطه (
.) در Regex معمولاً به معنی هر کاراکتری بهجز خط جدید (\n) است.مثال:
import re
text = "cat"
result = re.findall(r"c.t", text)
print(result)
خروجی:
['cat']
چون نقطه میتونه با کاراکتر
a تطبیق پیدا کنه.مثالهای دیگه:
c.t → cat
c.t → cot
c.t → c7t
اما
c.t با ct تطبیق پیدا نمیکنه؛ چون نقطه باید با یک کاراکتر تطبیق داشته باشه.——————
مثال ترکیبی
import re
text = "Ali123"
result = re.findall(r"\w+", text)
print(result)
خروجی:
['Ali123']
چون تمام حروف و اعداد پشت سر هم، با الگوی
\w+ تطبیق پیدا میکنن.———————
۵. اعتبارسنجی ایمیل با Regex
حالا بریم سراغ مثال ایمیل که در جزوهات نوشتی.
هدف اینه که بررسی کنیم آیا ایمیل واردشده، با یک الگوی مشخص مطابقت داره یا نه.
نسخه اصلاحشده کد
import re
def is_valid_email(email):
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
return re.fullmatch(pattern, email) is not None
email = input("Enter email: ")
if is_valid_email(email):
print("Valid email")
else:
print("Invalid email")
مثال ورودی و خروجی
ورودی:
ali123@gmail.com
خروجی:
Valid email
ورودی:
ali123gmail.com
خروجی:
Invalid email
چون در ایمیل دوم علامت
@ وجود نداره.——————-
My folder vip
🐍 فصل پانزدهم — پایتون مقدماتی regex —————————————- خب رسیدیم به یکی از مباحث بسیار کاربردی پایتون، مخصوصاً برای امنیت شبکه، پنتست، تحلیل لاگ و پردازش دادهها. 🔐 فقط اول یک اصلاح مهم: Regex مربوط به رمزنگاری (Encryption) نیست. ریجکس ابزاری برای جستوجو،…
چرا از
چون نقطه در Regex معنای خاصی داره و تقریباً هر کاراکتری رو تطبیق میده.
اما ما در ایمیل به یک نقطه واقعی نیاز داریم؛ بنابراین مینویسیم:
چرا از
مثلاً:
حرف
این کار باعث میشه بکاسلشها در رشته، بهصورت خام نگه داشته بشن و برای نوشتن Regex خواناتر باشن.
نکته مهم: این الگو یک بررسی مقدماتی برای فرمت ایمیله، نه اعتبارسنجی کامل استاندارد ایمیل. ممکنه بعضی آدرسهای معتبر رو رد کنه یا بعضی آدرسهای نامعتبر رو بپذیره. برای اطمینان از واقعی بودن ایمیل، معمولاً باید تأییدیه ارسال بشه.
—————
مثال
خروجی:
——————
\. استفاده کردیم؟چون نقطه در Regex معنای خاصی داره و تقریباً هر کاراکتری رو تطبیق میده.
اما ما در ایمیل به یک نقطه واقعی نیاز داریم؛ بنابراین مینویسیم:
\.
چرا از
r قبل از رشته استفاده کردیم؟مثلاً:
pattern = r"\d+"
حرف
r یعنی Raw String.این کار باعث میشه بکاسلشها در رشته، بهصورت خام نگه داشته بشن و برای نوشتن Regex خواناتر باشن.
نکته مهم: این الگو یک بررسی مقدماتی برای فرمت ایمیله، نه اعتبارسنجی کامل استاندارد ایمیل. ممکنه بعضی آدرسهای معتبر رو رد کنه یا بعضی آدرسهای نامعتبر رو بپذیره. برای اطمینان از واقعی بودن ایمیل، معمولاً باید تأییدیه ارسال بشه.
—————
مثال
findall():import re
text = "User1 logged in. User2 logged in."
users = re.findall(r"User\d", text)
print(users)
خروجی:
['User1', 'User2']
——————
My folder vip
چرا از \. استفاده کردیم؟ چون نقطه در Regex معنای خاصی داره و تقریباً هر کاراکتری رو تطبیق میده. اما ما در ایمیل به یک نقطه واقعی نیاز داریم؛ بنابراین مینویسیم: \. چرا از r قبل از رشته استفاده کردیم؟ مثلاً: pattern = r"\d+" حرف r یعنی Raw String. این کار…
کاربرد Regex در امنیت سایبری 🔐
فرض کن در یک فایل لاگ، آدرسهای IP زیادی وجود داره و میخوایم اونها رو استخراج کنیم.
خروجی:
این Regex ظاهری شبیه IPv4 رو پیدا میکنه، اما بهتنهایی معتبر بودن IP رو تضمین نمیکنه؛ برای اعتبارسنجی دقیق IPv4 بهتره از ماژول
در تحلیل لاگها، Regex میتونه به استخراج IP، شناسایی الگوهای درخواست مشکوک و فیلتر کردن دادهها کمک کنه.
فرض کن در یک فایل لاگ، آدرسهای IP زیادی وجود داره و میخوایم اونها رو استخراج کنیم.
import re
text = """
Login from 192.168.1.10
Login from 10.0.0.5
"""
ips = re.findall(r"\b\d{1,3}(?:\.\d{1,3}){3}\b", text)
print(ips)
خروجی:
['192.168.1.10', '10.0.0.5']
این Regex ظاهری شبیه IPv4 رو پیدا میکنه، اما بهتنهایی معتبر بودن IP رو تضمین نمیکنه؛ برای اعتبارسنجی دقیق IPv4 بهتره از ماژول
ipaddress استفاده کنیم.در تحلیل لاگها، Regex میتونه به استخراج IP، شناسایی الگوهای درخواست مشکوک و فیلتر کردن دادهها کمک کنه.
پایتون مقدماتی هم با موفقیت تموم شد!
تا اینجا مسیر:
به امید موفقیتت توی ادامه مسیر؛ بریم برای MCSA! 🚀
تا اینجا مسیر:
| دوره | وضعیت |
| --------------| ----------- |
| ✅ Network+ | تکمیل شد
| ✅ Python Basic | تکمیل شد
| ✅ LPIC-1 | تکمیل شد
| 🚀 MCSA | در حال شروع
| 🔜 CEH | باقیمانده
| 🔜 SANS 504 | باقیمانده
به امید موفقیتت توی ادامه مسیر؛ بریم برای MCSA! 🚀
🖥 فصل اول دوره MCSA — قسمت اول
Windows Server vs Azure
━━━━━━━━━━━━━━━━━━
1) Windows Server چیست؟
Windows Server یک سیستمعامل سروری از شرکت مایکروسافت است که برای راهاندازی و مدیریت سرویسهای شبکه استفاده میشود.
برخلاف Windows 10/11 که بیشتر برای کاربر نهایی طراحی شده، Windows Server برای محیطهای سازمانی ساخته شده است.
در این دوره هدف ما یادگیری سرویسهایی است که روی Windows Server اجرا میشوند.
مثلاً:
Active Directory → مدیریت کاربران و کامپیوترهای سازمان
DNS → مدیریت نامها و تبدیل Name به IP
DHCP → اختصاص خودکار IP
File Server → اشتراکگذاری فایلها
Group Policy → اعمال قوانین و تنظیمات روی کاربران
WSUS → مدیریت آپدیتهای ویندوز
Hyper-V → مجازیسازی
یعنی ما یک Windows Server نصب میکنیم و بعد سرویسهای مورد نیاز سازمان را روی آن فعال میکنیم.
————————
2) Azure چیست؟
Microsoft Azure پلتفرم Cloud شرکت مایکروسافت است.
در گذشته شرکتها برای راهاندازی سرویسهای خودشان باید:
سرور فیزیکی خریداری میکردند
رک تهیه میکردند
دیتاسنتر ایجاد میکردند
اینترنت و برق پایدار فراهم میکردند
تجهیزات شبکه و امنیت را مدیریت میکردند
اما با Cloud این مدل تغییر کرد.
شرکتهایی مثل مایکروسافت دیتاسنترهای بسیار بزرگی در نقاط مختلف دنیا ایجاد کردند و آنها را به هم متصل کردند.
حالا یک شرکت میتواند از هر جای دنیا:
یک سرور مجازی بسازد
فضای ذخیرهسازی دریافت کند
سرویس شبکه استفاده کند
بدون خرید سختافزار، منابع را اجاره کند
———————
3) مفهوم On-Premises (On-Prem)
On-Premises یعنی زیرساخت داخل محل خود سازمان باشد.
مثال:
یک شرکت ۲۰۰ کارمند دارد.
خود شرکت:
سرور خریداری میکند
Windows Server نصب میکند
Active Directory راهاندازی میکند
شبکه و امنیت را خودش مدیریت میکند
این مدل میشود:
مزایا:
کنترل کامل روی تجهیزات
اطلاعات داخل سازمان باقی میماند
شخصیسازی بیشتر
معایب:
هزینه خرید تجهیزات
هزینه نگهداری
نیاز به نیروی متخصص
مسئولیت خرابی سختافزار با خود سازمان است
————————-
4) Cloud چیست؟
در مقابل On-Prem، مفهوم Cloud قرار دارد.
در Cloud شما مالک سختافزار نیستید، بلکه منابع را از یک شرکت ارائهدهنده اجاره میکنید.
مثلاً:
مایکروسافت Azure:
شما فقط به اندازه نیازتان منابع دریافت میکنید.
مثلاً:
4 Core CPU
16GB RAM
200GB Storage
و هزینه همان مقدار را پرداخت میکنید.
———————————
5) SLA چیست؟
SLA = Service Level Agreement
یعنی توافقنامه سطح خدمات.
این قراردادی است که شرکت ارائهدهنده سرویس (مثل Azure) درباره کیفیت سرویس خود ارائه میدهد.
مثلاً:
"ما تضمین میکنیم سرویس شما 99.9% در دسترس باشد."
یعنی شرکت متعهد میشود سرورها تا درصد مشخصی فعال باشند.
مثال:
99.9% Uptime یعنی حدود:
حداکثر چند ساعت قطعی در سال.
هرچه SLA بالاتر باشد، معمولاً هزینه سرویس بیشتر میشود.
————————
6) مدلهای Cloud Computing
سه مدل اصلی داریم:
1) IaaS
Infrastructure as a Service
یعنی زیرساخت بهعنوان سرویس.
در این مدل شما سختافزار مجازی دریافت میکنید.
مثال:
Azure VM
مایکروسافت به شما میدهد:
CPU
RAM
Storage
Network
ولی مدیریت سیستمعامل با شماست.
مثال واقعی:
یک Windows Server روی Azure میسازید و خودتان:
AD نصب میکنید
DNS نصب میکنید
تنظیمات امنیتی انجام میدهید
————-
2) PaaS
Platform as a Service
یعنی پلتفرم آماده.
اینجا شما دیگر درگیر مدیریت سیستمعامل نیستید.
مثال:
یک برنامهنویس میخواهد یک سایت اجرا کند.
به جای اینکه:
سرور بخرد
ویندوز نصب کند
وبسرور نصب کند
فقط برنامه خود را روی سرویس آماده قرار میدهد.
————————-
3) SaaS
Software as a Service
نرمافزار آماده بهصورت سرویس.
کاربر فقط استفاده میکند.
مثال:
Gmail
Microsoft 365
سرویسهای آنلاین مدیریت سازمان
شما فقط وارد میشوید و استفاده میکنید.
——————
🧠 مثال سازمانی
فرض کنیم یک شرکت فروشگاهی داریم:
حالت اول: On-Prem
شرکت خودش:
سرور میخرد
Windows Server نصب میکند
AD و Database راهاندازی میکند
حالت دوم: Azure
شرکت:
یک VM از Azure میگیرد
سرویسها را روی آن اجرا میکند
بابت منابع مصرفی هزینه میدهد
———————————————-
نکات مهم مصاحبهای ⭐️
✅ تفاوت اصلی On-Prem و Cloud چیست؟
→ در On-Prem تجهیزات متعلق به سازمان است، در Cloud منابع از Provider اجاره میشود.
✅ SLA چیست؟
→ تعهد ارائهدهنده سرویس برای میزان دسترسی و کیفیت سرویس.
✅ تفاوت IaaS و SaaS؟
→ در IaaS زیرساخت میگیریم و مدیریت بیشتری داریم؛ در SaaS نرمافزار آماده دریافت میکنیم.
Windows Server vs Azure
━━━━━━━━━━━━━━━━━━
1) Windows Server چیست؟
Windows Server یک سیستمعامل سروری از شرکت مایکروسافت است که برای راهاندازی و مدیریت سرویسهای شبکه استفاده میشود.
برخلاف Windows 10/11 که بیشتر برای کاربر نهایی طراحی شده، Windows Server برای محیطهای سازمانی ساخته شده است.
در این دوره هدف ما یادگیری سرویسهایی است که روی Windows Server اجرا میشوند.
مثلاً:
Active Directory → مدیریت کاربران و کامپیوترهای سازمان
DNS → مدیریت نامها و تبدیل Name به IP
DHCP → اختصاص خودکار IP
File Server → اشتراکگذاری فایلها
Group Policy → اعمال قوانین و تنظیمات روی کاربران
WSUS → مدیریت آپدیتهای ویندوز
Hyper-V → مجازیسازی
یعنی ما یک Windows Server نصب میکنیم و بعد سرویسهای مورد نیاز سازمان را روی آن فعال میکنیم.
————————
2) Azure چیست؟
Microsoft Azure پلتفرم Cloud شرکت مایکروسافت است.
در گذشته شرکتها برای راهاندازی سرویسهای خودشان باید:
سرور فیزیکی خریداری میکردند
رک تهیه میکردند
دیتاسنتر ایجاد میکردند
اینترنت و برق پایدار فراهم میکردند
تجهیزات شبکه و امنیت را مدیریت میکردند
اما با Cloud این مدل تغییر کرد.
شرکتهایی مثل مایکروسافت دیتاسنترهای بسیار بزرگی در نقاط مختلف دنیا ایجاد کردند و آنها را به هم متصل کردند.
حالا یک شرکت میتواند از هر جای دنیا:
یک سرور مجازی بسازد
فضای ذخیرهسازی دریافت کند
سرویس شبکه استفاده کند
بدون خرید سختافزار، منابع را اجاره کند
———————
3) مفهوم On-Premises (On-Prem)
On-Premises یعنی زیرساخت داخل محل خود سازمان باشد.
مثال:
یک شرکت ۲۰۰ کارمند دارد.
خود شرکت:
سرور خریداری میکند
Windows Server نصب میکند
Active Directory راهاندازی میکند
شبکه و امنیت را خودش مدیریت میکند
این مدل میشود:
Company Office
|
|
Physical Server
|
Windows Server
|
Network Services
مزایا:
کنترل کامل روی تجهیزات
اطلاعات داخل سازمان باقی میماند
شخصیسازی بیشتر
معایب:
هزینه خرید تجهیزات
هزینه نگهداری
نیاز به نیروی متخصص
مسئولیت خرابی سختافزار با خود سازمان است
————————-
4) Cloud چیست؟
در مقابل On-Prem، مفهوم Cloud قرار دارد.
در Cloud شما مالک سختافزار نیستید، بلکه منابع را از یک شرکت ارائهدهنده اجاره میکنید.
مثلاً:
مایکروسافت Azure:
Microsoft Datacenter
Server
Storage
Network
Security
↓
Customer
شما فقط به اندازه نیازتان منابع دریافت میکنید.
مثلاً:
4 Core CPU
16GB RAM
200GB Storage
و هزینه همان مقدار را پرداخت میکنید.
———————————
5) SLA چیست؟
SLA = Service Level Agreement
یعنی توافقنامه سطح خدمات.
این قراردادی است که شرکت ارائهدهنده سرویس (مثل Azure) درباره کیفیت سرویس خود ارائه میدهد.
مثلاً:
"ما تضمین میکنیم سرویس شما 99.9% در دسترس باشد."
یعنی شرکت متعهد میشود سرورها تا درصد مشخصی فعال باشند.
مثال:
99.9% Uptime یعنی حدود:
حداکثر چند ساعت قطعی در سال.
هرچه SLA بالاتر باشد، معمولاً هزینه سرویس بیشتر میشود.
————————
6) مدلهای Cloud Computing
سه مدل اصلی داریم:
1) IaaS
Infrastructure as a Service
یعنی زیرساخت بهعنوان سرویس.
در این مدل شما سختافزار مجازی دریافت میکنید.
مثال:
Azure VM
مایکروسافت به شما میدهد:
CPU
RAM
Storage
Network
ولی مدیریت سیستمعامل با شماست.
مثال واقعی:
یک Windows Server روی Azure میسازید و خودتان:
AD نصب میکنید
DNS نصب میکنید
تنظیمات امنیتی انجام میدهید
————-
2) PaaS
Platform as a Service
یعنی پلتفرم آماده.
اینجا شما دیگر درگیر مدیریت سیستمعامل نیستید.
مثال:
یک برنامهنویس میخواهد یک سایت اجرا کند.
به جای اینکه:
سرور بخرد
ویندوز نصب کند
وبسرور نصب کند
فقط برنامه خود را روی سرویس آماده قرار میدهد.
————————-
3) SaaS
Software as a Service
نرمافزار آماده بهصورت سرویس.
کاربر فقط استفاده میکند.
مثال:
Gmail
Microsoft 365
سرویسهای آنلاین مدیریت سازمان
شما فقط وارد میشوید و استفاده میکنید.
——————
🧠 مثال سازمانی
فرض کنیم یک شرکت فروشگاهی داریم:
حالت اول: On-Prem
شرکت خودش:
سرور میخرد
Windows Server نصب میکند
AD و Database راهاندازی میکند
حالت دوم: Azure
شرکت:
یک VM از Azure میگیرد
سرویسها را روی آن اجرا میکند
بابت منابع مصرفی هزینه میدهد
———————————————-
نکات مهم مصاحبهای ⭐️
✅ تفاوت اصلی On-Prem و Cloud چیست؟
→ در On-Prem تجهیزات متعلق به سازمان است، در Cloud منابع از Provider اجاره میشود.
✅ SLA چیست؟
→ تعهد ارائهدهنده سرویس برای میزان دسترسی و کیفیت سرویس.
✅ تفاوت IaaS و SaaS؟
→ در IaaS زیرساخت میگیریم و مدیریت بیشتری داریم؛ در SaaS نرمافزار آماده دریافت میکنیم.
🖥 فصل اول دوره MCSA — قسمت دوم
Microsoft Roadmap
━━━━━━━━━━━━━━━━━━
MCSA چیست؟
MCSA = Microsoft Certified Solutions Associate
یک سطح از مدارک قدیمی مایکروسافت بود که بیشتر روی مهارتهای زیرساختی و محصولات Microsoft مثل Windows Server تمرکز داشت.
—————————
MCSE چیست؟
MCSE = Microsoft Certified Solutions Expert
سطح بالاتر از MCSA بود و برای نشان دادن مهارت تخصصیتر در محصولات و زیرساختهای مایکروسافت استفاده میشد.
مسیر قدیمی:
———————————-
🚀 ساختار جدید Microsoft Certifications
مایکروسافت مسیر مدارک را به چهار سطح اصلی تقسیم کرده:
1️⃣ Fundamentals — پایه
برای شروع و آشنایی با مفاهیم پایه.
مثال:
AZ-900 → Azure Fundamentals
AI-900 → AI Fundamentals
DP-900 → Data Fundamentals
2️⃣ Associate — پیکربندی و کار عملی
سطح متوسط برای یادگیری و پیادهسازی سرویسها.
یعنی از حالت «فقط شناخت مفاهیم» وارد مرحله کار و Configuration میشویم.
3️⃣ Expert — متخصص حرفهای
سطح پیشرفته برای افراد متخصص.
مثالهایی که در کلاس گفته شد:
AZ-305
AZ-400
4️⃣ Specialty — تخصصهای خاص
دورهها و مدارک تخصصی برای یک حوزه یا سرویس خاص.
Microsoft Roadmap
━━━━━━━━━━━━━━━━━━
MCSA چیست؟
MCSA = Microsoft Certified Solutions Associate
یک سطح از مدارک قدیمی مایکروسافت بود که بیشتر روی مهارتهای زیرساختی و محصولات Microsoft مثل Windows Server تمرکز داشت.
—————————
MCSE چیست؟
MCSE = Microsoft Certified Solutions Expert
سطح بالاتر از MCSA بود و برای نشان دادن مهارت تخصصیتر در محصولات و زیرساختهای مایکروسافت استفاده میشد.
مسیر قدیمی:
MCSA
↓
MCSE
در مسیر جدید، مایکروسافت ساختار مدارک قدیمی MCSA/MCSE را کنار گذاشت و مسیر Certification را به سمت نقشهای شغلی و Azure برد.
———————————-
🚀 ساختار جدید Microsoft Certifications
مایکروسافت مسیر مدارک را به چهار سطح اصلی تقسیم کرده:
1️⃣ Fundamentals — پایه
برای شروع و آشنایی با مفاهیم پایه.
مثال:
AZ-900 → Azure Fundamentals
AI-900 → AI Fundamentals
DP-900 → Data Fundamentals
2️⃣ Associate — پیکربندی و کار عملی
سطح متوسط برای یادگیری و پیادهسازی سرویسها.
یعنی از حالت «فقط شناخت مفاهیم» وارد مرحله کار و Configuration میشویم.
3️⃣ Expert — متخصص حرفهای
سطح پیشرفته برای افراد متخصص.
مثالهایی که در کلاس گفته شد:
AZ-305
AZ-400
4️⃣ Specialty — تخصصهای خاص
دورهها و مدارک تخصصی برای یک حوزه یا سرویس خاص.
🖥 فصل اول دوره MCSA — قسمت سوم
Windows Server Editions & Installation
━━━━━━━━━━━━━━━━━━
1️⃣ ادیشنهای Windows Server
در این مبحث با ۳ ادیشن اصلی مواجه میشویم:
🔹 Standard
برای سازمانها و سرورهای معمولی.
🔹 Datacenter
برای محیطهای بزرگتر و دیتاسنتری، مخصوصاً زمانی که قابلیتهای پیشرفته مجازیسازی و دیتاسنتر مورد نیاز باشد.
🔹 Datacenter: Azure Edition
نسخهای از Windows Server که برای محیطهای Azure و Hybrid Cloud طراحی شده و قابلیتهای مخصوص Azure را ارائه میکند.
————————
2️⃣ حداقل سختافزار Windows Server
برای نصب Windows Server باید منابع سختافزاری مناسبی در اختیار سیستم قرار دهیم.
مهمترین منابع:
CPU
RAM
Storage
Network
اما یک نکته مهم:
مثلاً سروری که فقط برای یک Lab و یادگیری استفاده میکنیم با سروری که قرار است Domain Controller + DNS + DHCP + File Server باشد، منابع یکسانی نیاز ندارد.
—————————-
3️⃣ نصب Windows Server روی VMware Workstation
برای دوره MCSA بهتر است Windows Server را بهصورت Virtual Machine نصب کنیم.
ساختار Lab:
مراحل کلی:
1. VMware Workstation را باز میکنیم.
2. یک Virtual Machine جدید میسازیم.
3. فایل ISO مربوط به Windows Server را انتخاب میکنیم.
4. منابع VM را مشخص میکنیم:
5. VM را Boot میکنیم.
6. در Windows Setup نسخه موردنظر را انتخاب میکنیم.
مثلاً:
7. نوع نصب را انتخاب میکنیم.
8. دیسک مقصد را انتخاب و نصب را شروع میکنیم.
——————————-
Windows Server Editions & Installation
━━━━━━━━━━━━━━━━━━
1️⃣ ادیشنهای Windows Server
در این مبحث با ۳ ادیشن اصلی مواجه میشویم:
🔹 Standard
برای سازمانها و سرورهای معمولی.
🔹 Datacenter
برای محیطهای بزرگتر و دیتاسنتری، مخصوصاً زمانی که قابلیتهای پیشرفته مجازیسازی و دیتاسنتر مورد نیاز باشد.
🔹 Datacenter: Azure Edition
نسخهای از Windows Server که برای محیطهای Azure و Hybrid Cloud طراحی شده و قابلیتهای مخصوص Azure را ارائه میکند.
————————
2️⃣ حداقل سختافزار Windows Server
برای نصب Windows Server باید منابع سختافزاری مناسبی در اختیار سیستم قرار دهیم.
مهمترین منابع:
CPU
RAM
Storage
Network
اما یک نکته مهم:
مقدار RAM و CPU موردنیاز واقعی، به نسخه Windows Server، سرویسهایی که قرار است اجرا شوند و تعداد کاربران بستگی دارد.
مثلاً سروری که فقط برای یک Lab و یادگیری استفاده میکنیم با سروری که قرار است Domain Controller + DNS + DHCP + File Server باشد، منابع یکسانی نیاز ندارد.
—————————-
3️⃣ نصب Windows Server روی VMware Workstation
برای دوره MCSA بهتر است Windows Server را بهصورت Virtual Machine نصب کنیم.
ساختار Lab:
VMware Workstation
│
└── Windows Server VM
│
├── Active Directory
├── DNS
├── DHCP
└── سایر سرویسها
مراحل کلی:
1. VMware Workstation را باز میکنیم.
2. یک Virtual Machine جدید میسازیم.
3. فایل ISO مربوط به Windows Server را انتخاب میکنیم.
4. منابع VM را مشخص میکنیم:
CPU
RAM
Hard Disk
Network Adapter
5. VM را Boot میکنیم.
6. در Windows Setup نسخه موردنظر را انتخاب میکنیم.
مثلاً:
Windows Server Standard
Windows Server Datacenter
7. نوع نصب را انتخاب میکنیم.
8. دیسک مقصد را انتخاب و نصب را شروع میکنیم.
——————————-
❤2
فصل اول دوره MCSA — قسمت جهارم
Windows Server Core
━━━━━━━━━━━━━━━━━━
1️⃣ Windows Server Core چیست؟
Windows Server Core نسخهای از Windows Server است که محیط گرافیکی کامل (GUI) را ندارد.
یعنی بعد از نصب، با محیطی شبیه این مواجه میشویم:
و بیشتر مدیریت سرور از طریق Command Line انجام میشود.
در نتیجه:
——————
2️⃣ چرا از Server Core استفاده میکنیم؟
چون بخش زیادی از اجزای گرافیکی Windows حذف شده است، معمولاً:
منابع کمتری مصرف میکند.
RAM کمتری نیاز دارد.
فضای دیسک کمتری مصرف میکند.
سطح حمله کمتری دارد.
برای اجرای سرویسهای سروری مناسب است.
مثلاً اگر یک سرور فقط قرار است یک سرویس مشخص را اجرا کند، همیشه لازم نیست محیط گرافیکی کامل Windows را داشته باشد.
————————
3️⃣ نصب Server Core روی VMware Workstation
در Lab خودمان میتوانیم Server Core را داخل VMware نصب کنیم.
ساختار:
در هنگام نصب Windows Server، نسخه Server Core را انتخاب میکنیم.
بعد از نصب، برخلاف نسخه Desktop Experience، محیط گرافیکی کامل Windows را نخواهیم داشت.
Windows Server Core
━━━━━━━━━━━━━━━━━━
1️⃣ Windows Server Core چیست؟
Windows Server Core نسخهای از Windows Server است که محیط گرافیکی کامل (GUI) را ندارد.
یعنی بعد از نصب، با محیطی شبیه این مواجه میشویم:
C:\>
و بیشتر مدیریت سرور از طریق Command Line انجام میشود.
در نتیجه:
Windows Server GUI
→ محیط گرافیکی کامل
Windows Server Core
→ بدون GUI کامل، مدیریت با Command Line
——————
2️⃣ چرا از Server Core استفاده میکنیم؟
چون بخش زیادی از اجزای گرافیکی Windows حذف شده است، معمولاً:
منابع کمتری مصرف میکند.
RAM کمتری نیاز دارد.
فضای دیسک کمتری مصرف میکند.
سطح حمله کمتری دارد.
برای اجرای سرویسهای سروری مناسب است.
مثلاً اگر یک سرور فقط قرار است یک سرویس مشخص را اجرا کند، همیشه لازم نیست محیط گرافیکی کامل Windows را داشته باشد.
————————
3️⃣ نصب Server Core روی VMware Workstation
در Lab خودمان میتوانیم Server Core را داخل VMware نصب کنیم.
ساختار:
VMware Workstation
↓
Create New VM
↓
Windows Server ISO
↓
انتخاب Server Core
↓
Installation
↓
Command Line
در هنگام نصب Windows Server، نسخه Server Core را انتخاب میکنیم.
بعد از نصب، برخلاف نسخه Desktop Experience، محیط گرافیکی کامل Windows را نخواهیم داشت.