My folder vip
76 subscribers
202 photos
82 videos
622 files
499 links
آرشیو یادگیری هک/امنیت

اینجا فولدر شخصی من برای یادگیری و ثبت مطالب Linux، Networking و Cyber Security است.

🔐 LPIC | Network+ | CEH | SANS
🐧 Linux & System Administration
🌐 Networking & Troubleshooting
💻 Python & Security Tools
🧪 Labs | CTF | Prac
Download Telegram
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) چیست؟
ماژول در پایتون، به‌طور ساده، یک فایل پایتون با پسوند .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.py
def 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 | ماژول‌ها و کتابخانه‌ها توی این فصل یاد می‌گیریم چطور از کدهایی که دیگران نوشته‌اند استفاده کنیم و چطور کدهای خودمون رو در فایل‌های جداگانه قرار بدیم تا بتونیم در پروژه‌های مختلف ازشون استفاده…
ارتباط ماژول‌ها با امنیت و شبکه

ماژول‌ها کمک می‌کنن کدهای امنیتی و شبکه‌ای خودمون رو مرتب و قابل استفاده مجدد بنویسیم.
برای مثال، ماژول 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() نیست.
مثال نوشتن با with
with 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) چیست؟
هنگام اجرای برنامه ممکنه اتفاقی بیفته که اجرای عادی برنامه رو مختل کنه.
مثلاً:
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 رو در لاگ ذخیره نکن.
خطاهای مشخص رو مدیریت کن؛ از 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
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)

————————
۵. مثال کامل ارث‌بری در پایتون
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 از لاگ‌ها
بررسی فرمت رمز عبور
پیدا کردن الگوهای مشکوک در لاگ‌های امنیتی
پردازش و پاک‌سازی داده‌های متنی
در پایتون، ماژول داخلی 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 معنای خاصی داره و تقریباً هر کاراکتری رو تطبیق می‌ده.
اما ما در ایمیل به یک نقطه واقعی نیاز داریم؛ بنابراین می‌نویسیم:
\.

چرا از 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 زیادی وجود داره و می‌خوایم اون‌ها رو استخراج کنیم.
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، شناسایی الگوهای درخواست مشکوک و فیلتر کردن داده‌ها کمک کنه.
پایتون مقدماتی هم با موفقیت تموم شد!

تا اینجا مسیر:

| دوره           | وضعیت       |
| --------------| ----------- |
| ✅ 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 راه‌اندازی می‌کند
شبکه و امنیت را خودش مدیریت می‌کند
این مدل می‌شود:
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 بود و برای نشان دادن مهارت تخصصی‌تر در محصولات و زیرساخت‌های مایکروسافت استفاده می‌شد.
مسیر قدیمی:
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
اما یک نکته مهم:
مقدار 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) را ندارد.
یعنی بعد از نصب، با محیطی شبیه این مواجه می‌شویم:
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 را نخواهیم داشت.
فصل اول دوره MCSA — قسمت پنجم
Windows Server Upgrade
━━━━━━━━━━━━━━━━━━

1️⃣ Upgrade چیست؟
Upgrade یعنی سیستم‌عامل فعلی را به نسخه جدیدتر منتقل کنیم، بدون اینکه از ابتدا سیستم‌عامل را کاملاً پاک و نصب کنیم.
مثلاً:
Windows Server 2012
↓
Windows Server 2016

یا:
2016 → 2019
2019 → 2022
2022 → 2025

در Upgrade معمولاً تنظیمات، برنامه‌ها و اطلاعات موجود تا حد امکان حفظ می‌شوند.


———————
2️⃣ Clean Installation چیست؟
Clean Installation یعنی سیستم‌عامل را از ابتدا نصب کنیم.
در این روش معمولاً سیستم‌عامل قبلی را کنار گذاشته و یک Windows Server جدید نصب می‌کنیم.
مثلاً:
Server 2012
↓
پاک/جایگزین
↓
Server 2025

——————-

3️⃣ مسیر Upgrade
در مثالی که در کلاس مطرح شد، نسخه‌های Windows Server به‌صورت زنجیره‌ای مطرح می‌شوند:
2012
↓
2016
↓
2019
↓
2022
↓
2025

⚠️ نکته: امکان Upgrade واقعی به Edition، نسخه و سناریوی نصب بستگی دارد؛ بنابراین این زنجیره را نباید به‌معنای مجاز بودن هر ترکیب Upgrade در همه شرایط در نظر گرفت.


————————

4️⃣ مشاهده نسخه Windows Server
یکی از ساده‌ترین دستورات:
winver

با اجرای آن، اطلاعات نسخه Windows نمایش داده می‌شود.
مثلاً می‌توانیم متوجه شویم:
Version
Build
Windows Edition
چیست.
همچنین اطلاعات سیستم‌عامل را می‌توان از بخش‌های مدیریتی Windows نیز مشاهده کرد.


—————————

5️⃣ روش کلی Upgrade
فرض کنیم الان روی سرور:
Windows Server 2019

داریم و می‌خواهیم آن را Upgrade کنیم.
مراحل کلی:
Windows Server جدید
↓
ISO / DVD
↓
Mount در سرور
↓
باز کردن DVD Drive
↓
Setup.exe
↓
Upgrade
↓
انتخاب گزینه حفظ اطلاعات
↓
Installation

در محیط VMware هم می‌توانیم ISO نسخه جدید را به CD/DVD Drive ماشین مجازی متصل کنیم.
مثلاً:
VMware
↓
VM Settings
↓
CD/DVD
↓
Use ISO Image File
↓
Windows Server 2025 ISO

سپس وارد DVD مربوط به Windows Server می‌شویم و فرآیند Setup را اجرا می‌کنیم.
فصل اول دوره MCSA — قسمت ششم
Windows Server Environment
━━━━━━━━━━━━━━━━━━

1️⃣ Server Manager چیست؟
Server Manager ابزار مدیریتی اصلی Windows Server است که برای مدیریت Role، Feature و وضعیت سرور استفاده می‌شود.
بعد از ورود به Windows Server معمولاً Server Manager را می‌بینیم.

از اینجا می‌توانیم:

Role اضافه کنیم.
Feature اضافه کنیم.
وضعیت Server را بررسی کنیم.
سرویس‌ها و وضعیت‌های مختلف را مدیریت کنیم.
سرورهای دیگر را نیز در بعضی سناریوها مدیریت کنیم.

————————
2️⃣ Add Roles and Features چیست؟
در Server Manager گزینه:
Add Roles and Features
برای اضافه کردن قابلیت‌ها و سرویس‌های مختلف Windows Server استفاده می‌شود.
Role چیست؟
Role یعنی یک وظیفه یا سرویس اصلی که سرور انجام می‌دهد.

مثلاً:
DNS Server
DHCP Server
File Server
Active Directory Domain Services (AD DS)

مثلاً اگر بخواهیم سرورمان DHCP Server شود:
Server Manager
↓
Add Roles and Features
↓
DHCP Server
↓
Install

————————

3️⃣ Add Feature چیست؟
Feature قابلیت‌هایی هستند که می‌توانیم به Windows Server اضافه کنیم، اما الزاماً یک Role اصلی محسوب نمی‌شوند.
پس:
Role
→ وظیفه اصلی سرور

Feature
→ قابلیت تکمیلی


————————

4️⃣ Add Other Server چیست؟
در Server Manager می‌توانیم سرورهای دیگر را نیز به محیط مدیریتی اضافه کنیم تا وضعیت و بعضی تنظیمات آن‌ها را از یک محل مشاهده و مدیریت کنیم.
مثلاً:
Server Manager
│
├── Server01
├── Server02
└── Server03

این قابلیت در محیط‌های سازمانی که چندین Windows Server داریم بسیار کاربردی است.

—————-

5️⃣ اتصال به Cloud
Windows Server می‌تواند در محیط‌های Cloud و Hybrid نیز مورد استفاده قرار گیرد.
در محیط‌های مایکروسافت، ارتباط Windows Server با سرویس‌های Cloud مانند Azure می‌تواند امکان مدیریت و استفاده از قابلیت‌های Cloud را فراهم کند.
یعنی سرور الزاماً فقط روی سخت‌افزار فیزیکی سازمان نیست و می‌تواند در محیط‌های Cloud نیز اجرا یا مدیریت شود.

———————-
6️⃣ بخش Local Server
در Server Manager بخشی به نام:
Local Server
داریم.
در این قسمت اطلاعات و وضعیت سرور فعلی را می‌بینیم.

مثلاً مواردی مانند:
Computer Name
Domain / Workgroup
Windows Update
Remote Management
Firewall
Network
Remote Desktop

از این قسمت قابل مشاهده و مدیریت هستند.

——————————

7️⃣ بخش Services
در محیط مدیریت Windows Server، وضعیت سرویس‌ها را می‌توان بررسی کرد.
مثلاً:
DHCP
DNS
Windows Update
File services

اگر یک سرویس دچار مشکل شده باشد یا اجرا نشده باشد، می‌توانیم وضعیت آن را بررسی کنیم.
مثلاً:
Service
↓
Running ✅
Stopped ❌

اگر سرویس موردنظر اجرا نشده باشد، باید علت خطا را بررسی و در صورت نیاز سرویس را Start کنیم.
🧪 مثال واقعی
فرض کن روی Server01، DHCP Server نصب کرده‌ایم.
اما DHCP کار نمی‌کند.
اول وضعیت سرویس را بررسی می‌کنیم:
Server Manager
↓
Local Server
↓
Services
↓
DHCP Server

اگر سرویس Stopped باشد، مشکل می‌تواند از همین قسمت مشخص شود.
My folder vip pinned «دوتا دوره تمام شده به ترتیب 👇👇👇👇 1️⃣: دوره نتورک پلاس از اول ——————————————————— ——————————————————— 2️⃣: دوره الپیک1 از اول ——————————————————— ——————————————————— 3️⃣: دوره پایتون مقدماتی ——————————————————— ——————————————————— 4️⃣: دوره MCSA»