Python Hints
前往频道在 Telegram
Python tips and tricks The Good, Bad and the Ugly توی این کانال فقط قرار هست در مورد core python صحبت کنیم. این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار) Admin: @Abbasi_ai
显示更多9 665
订阅者
+324 小时
+457 天
+20130 天
帖子存档
9 665
خیال راحتترین حالت استفاده
درحال حاضر mtproto هست
چون غیر از تلگرام جایی استفاده نمیشه
و تلگرام هم تمام پیامها encryption دارند
9 665
دوستان با این وضعیت اینترنت، اینکه پیام میدید
چرا نا امن هست
چطوری بفهمیم امن هست یا نه
چرا سکرت تلگرام امن هست و ...
والا من نمیتونم جواب بدم انقدر سوال رو؛ تمام کانفیگها رو هم نمیتونم تست کنم
چندتا از دوستان گفتند منم نکات رو بررسی کردم دیدم میخونه با گفتهها، برای همین اطلاع دادم
سوالات عمومی تر خودتون رو هم میتونید از chatgpt بپرسید مطمئنم جواب میده به این مواردی که پرسیدید
فقط نکاتی که گفتم رو حتماً رعایت کنید
که
امنیت از دسترسی مهمتره9 665
یک پیشنهاد خوب که یکی از دوستان دادند
من هم داشتم همین رو تست میکردم
کانفیگهای این کانال رو اگر مجبور به استفاده هستید
روی یک گوشی که باهاش هیچ سایتی رو باز نمیکنید و هیچکاری نمیکنید بیارید بالا و بعد اون رو بعنوان پروکسی استفاده کنید
تا vpn های معمول گوشیهای دیگه رو وصل کنه براتون
روی گوشی خودتون هم میتونید بجای حالت vpn از حالت پروکسی استفاده کنید و فقط تلگرام رو باهاش کانفیگ کنید.
9 665
کلا از کانفیگ عمومی جز تلگرام استفاده نکن
رو یوتیوب و ... با اکانتی برید که به شما بر نمیگرده
کار خاصی باهاش نمیکنید و ...
ایمیل - گوگل سرچ و ... با این ویپیانها نزنید و موارد دیگر
توضیحات بیشتر هم از سواد و حوصلهی من خارج هست
اما هر اکانتی که به اطلاعات خصوصی شما بر میگرده رو با این vpn ها باز نکنید.
9 665
با این کانفیگهای عمومی
بجز تلگرام
نباید جایی رو باز کنید
لطفاً این نکات رو جدی بگیرید؛ اگر کاری که میکنید حتی مهمتر هم هست
حتماً حتماً حتماً
از
Secret Chat
استفاده کنید.
9 665
شدیداً مراقب کانفیگهای کانال
اینترنت آزاد باشید (تازه به ۱.۲ میلیون کاربر رسیده)
بچهها هم گفتند من هم چک کردم؛ شدیداً کانفیگها ناامن هست.
بخصوص اگر توی فضایی غیر از تلگرام استفاده میکنید
9 665
چندتا فیش پیدا کردم :
قبل از فیلترینگها (حدود سال ۸۸ اینا) - ماهیانه ۸۰ گیگ اینترنت میگرفتم برای کل خانواده سرعت دانلودم هم از الان بهتر بوده سرویس اختصاصی میگرفتم.
توی دوره فیلترینگ؛ تا همین ماه پیش برای خودم تنها مجموع اینترنت خونه و گوشی و ... ماهیانه ۱ ترابایت خرید میشه که ۹۹.۹٪ به ۳۰ روز نمیکشه (۱ ترابایت داخلی هست بینالمللی میشه حدود ۳۳۰ گیگ)
که احتمالا ۱۰۰ گیگش سر retry ها میره که وسطش قطع شده
درحال حاضر هم ۷-۸ روز پیش؛ برای ایمیل زدن به یکی از شرکتها که تازه باهاش کار رو شروع کرده بودم ۷ گیگ اینترنت خریدم که ۶ گیگش مونده
اما به ترتیب هرچی جلوتر اومدیم؛ بیشتر وقت و انرژی و عمرم صرف برقرار شدن اتصال شد؛ سایتهایی که نمیشه باز کرد یا خیلی وقتم رو میگیره
sqlalchemy, pypi, github, crates.io, rustlang, rust docs, docker, prometheus, grafana, ...
هست بخصوص توی مواردی که سایت هم مارو تحریم کرده
اما خیلی جالبه جاهایی که سعی کردند فیلتر کنند راحتتر باز میشه
telegram, x/tweeter, instagram, ...
بحثم کار کردن نیست؛ بحثم عمریه که داره تلف میشه؛ وگرینه این روزا تنها چیزی که براش وقت نمیذارم کار هست.
جاهایی که قبول کردند مرخصی گرفتم (البته من بخاطر شرایطی که قبل از اعتراضات بوجود اومد برام مرخصی گرفته بودم)
جاهایی هم که قبول نکردند به بهانه اینترنت کار نکردم (خیلی جاها هم اونا قبول نکردند ادامه بدند بخاطر اینترنت)9 665
پیام شما:
به بچه ها بگو با dns زیر رو مخابرات میتونن یوتوب رو باز کنن، سرعت و کیفیت عالیه78.157.42.101 78.157.42.101همچنین اگه تو اتصال به کانفیگ های مختلف و... رو مخابرات اختلال دارن dns زیر رو ست کن تو کلاینت هاشون شاید نتیجه بهتر شد94.140.14.14 94.140.15.15
9 665
چندنفر چندتا نکته گفتند،
پست مربوط به بازرگانان رو حذف کردم.
چون از آدمهای مختلفی شنیدم بنظرم قابل تأمل بود.
عذرخواهی هم میکنم از بازرگانانی که مجبور شدند حضور داشته باشند.
9 665
یک دوستی گفته برای ایمیل چیکار کنیم ؟
البته که ایمیلهای متصل به اکانت که verify و ... میخواد رو (مثلاً ایمیل به دانشگاه) که هیچ اما باقی موارد
سرویس ایمیل رو عوض کنید؛ سرورهای gmail رو زدن باقی بالاس
تست نکردم ولی شاید جواب بده:
میتونید gmail رو هم با این سرویسها که فعال هستند بیارید بالا
من غیر از gmail رو با این سرویسها آوردم بالا و جواب داد (تونستم ایمیل بزنم)
9 665
بازرگانها امروز صف کشیدن (طبق اخبار) برای دسترسی به ایمیل به همراه ناظر اونم فقط برای ۲۰ دقیقه.
یعنی ننگ، خفت، خواری ازین بالاتر نیست.
شخصاً حاضر بودم تا ترکیه پیاده برم و کارم رو انجام بدم و برگردم.
چندتا مثال هم هست که باید زده بشه ولی اینجا زن و بچه رد میشه، شما تو ذهن بیار.
فقط من چندتا سوال برام پیش اومد، از بازرگانهایی که رفتند:
۱- اگر ۲۰ دیقه بشه ۲۱ دیقه باید پاشو بلیسی بهت اجازه بیشتر بده ؟ یا التماس خالی کفایت میکنه ؟
۲- از اونجایی که هر دفعه دارن بیشتر تحقیرتون میکنند، دقیقاً کی قراره بگن ناموست رو بیار .... به اندازه دقایقش اینترنت بگیر ؟
اگر این سوالات رو پاسخ بدند ممنون میشم،
جهت شفاف سازی میگم، خداشاهده
9 665
تقریبا ۱ ساعتی هست که به هر دلیلی نه
url test
و نه
pingروی سرورهایی که داشتم جواب نمیده اما نکته جالب اینه که با همین سرورها به اینترنت بینالمللی وصل هستم. فکر کردم شاید مشکل از timeout باشه ولی نبود
9 665
کارهای اسکریپت
DNS هم داخلش هست و اونارو هم داره
فقط یک مورد با شما
اونم اسکریپت پایتون برای استخراج دیتای مربوط به کانالها9 665
nekoray, nekobox
دارها اینو تست کنید؛ لیست کانفیگها رو روی چندتا دامنه تست میزنه و بعد بهتون وصل شدهها و نشدههارو میده
فقط اگر لازم شد یک سری تنظیمات رو باید داخلش عوض کنید
NEKOBOX_DEFAULT_DIR
NEKOBOX_CODE_PATH
مثلا9 665
اینم شما فرستادید دوتا DNS قوی هست مثل اینکه:
2.188.21.130
2.188.21.46
دوستان ببخشید که کانال و رباتهایی که میگید رو معرفی نمیکنم.
بخاطر فروارد کردن مطلب از این مدل کانالها؛ randrng ریپورت شد
یک مقدار در شرایط فعلی ترجیح میدم با احتیاط عمل کنم که تریبون رو برای آموزش حفظ کنم
9 665
# ---------------- Fast selection: parse temp files (no network) --------------
best_dns=""; best_proto=""; best_domain=""; best_ip=""; best_time=999999999; best_http=""
# iterate through result files
for f in "$TMPDIR"/job.*; do
[[ -f "$f" ]] || continue
IFS=$'\t' read -r dns proto domain result ip time http < "$f" || continue
# prefer HTTP OK (2xx or 4xx) when in curl mode
if (( CURL_MODE == 1 )); then
if [[ "$result" == "OK" ]] && [[ "$http" =~ ^[24][0-9]{2}$ ]]; then
if (( time < best_time )); then
best_time=$time; best_dns="$dns"; best_proto="$proto"; best_domain="$domain"; best_ip="$ip"; best_http="$http"
fi
fi
else
if [[ "$result" == "OK" ]]; then
if (( time < best_time )); then
best_time=$time; best_dns="$dns"; best_proto="$proto"; best_domain="$domain"; best_ip="$ip"; best_http="$http"
fi
fi
fi
done
echo
if [[ -z "$best_dns" ]]; then
echo "No suitable candidate found (no OK answers matching criteria)."
else
echo "Best candidate: DNS=$best_dns PROTO=$best_proto DOMAIN=$best_domain IP=$best_ip TIME_MS=$best_time HTTP=${best_http:--}"
if (( SET_GNOME == 1 )); then
if ! command -v nmcli >/dev/null 2>&1; then
echo "nmcli not found; cannot set GNOME/NetworkManager DNS automatically."
else
echo "Attempting to set '$best_dns' as DNS on active NetworkManager connections..."
mapfile -t actives < <(nmcli -t -f NAME connection show --active)
if (( ${#actives[@]} == 0 )); then
echo "No active NetworkManager connections found to modify."
else
for nm in "${actives[@]}"; do
echo "Modifying connection: $nm"
if nmcli connection modify "$nm" ipv4.dns "$best_dns" ipv4.ignore-auto-dns yes >/dev/null 2>&1; then
if nmcli connection up "$nm" >/dev/null 2>&1; then
echo "Set DNS for $nm -> $best_dns (reactivated)"
else
echo "Modified $nm but failed to bring it up. You may need to run 'nmcli connection up \"$nm\"' as root."
fi
else
echo "Failed to modify $nm. You might need to run the script as a user with permissions or via sudo."
fi
done
fi
fi
fi
fi
exit 0
من این اسکریپت رو برای لینوکس چندروز قبل نوشتم به کمک chatgpt ولی دوتا نکته داره :
۱- پیشنهاد میکنم اگر شبکههای زیادی رو تنظیم دارید اصلا از -s استفاده نکنید
۲- حتما سعی کنید که لیست dns رو کامل کنید؛ خیلی از موارد توی این کد نیست و موارد جدید رو به DNS_LIST اضافه کنید
بعضی وقتا فاصله شما تا وصل شدن به اینترنت دقیقا همین DNS هست.
پیشنهاد خودم برای اجرا کردنش این هست که فایل رو به اسم dns_test.sh ذخیره کنید
./dns_test.sh -p 8
و بعد که dnsهای متصل داشتید از
./dns_test.sh -c
استفاده کنید مثلا برای من DNS های عادی گوگل رو هم باز نمیکرد برای پیدا کردن dns درست تست رو روی گوگل گذاشتم
آپشنهای دیگه رو هم من به chatgpt گفتم اضافه کنه ولی نیازم نشد برای همین تست نکردم؛ احتمال اینکه اشتباه کرده باشه زیاده چون خیلی از کد رو خودم ادیت کردم توی بخشهای قبلیش
بازم تاکید میکنم حتما DNS_LIST رو آپدیت کنید موارد بهتر هم وجود داره
این هم برای بچههای لینوکسی هست9 665
curl_via_ip() {
local domain="$1" ip="$2" code="000"
if command -v curl >/dev/null 2>&1; then
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 6 --resolve "${domain}:443:${ip}" "https://${domain}" 2>/dev/null || echo "000")
[[ "$code" == "000" ]] && code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 6 --resolve "${domain}:80:${ip}" "http://${domain}" 2>/dev/null || echo "000")
printf "%s" "$code"
elif command -v wget >/dev/null 2>&1; then
code=$(wget --timeout=6 --tries=1 --server-response --header="Host: ${domain}" "http://${ip}/" -qO- 2>&1 | awk '/^ HTTP/{print $2; exit}' || true)
printf "%s" "${code:-000}"
else
printf "000"
fi
}
print_header() {
printf "%-18s %-5s %-26s %-10s %-18s %7s %6s\n" "DNS" "PROTO" "DOMAIN" "RESULT" "IP" "TIME_MS" "HTTP"
printf "%-18s %-5s %-26s %-10s %-18s %7s %6s\n" "------------------" "-----" "--------------------------" "----------" "------------------" "-------" "------"
}
print_row() {
local dns="$1" proto="$2" domain="$3" result="$4" ip="$5" time_ms="$6" http="$7"
printf "%-18s %-5s %-26s %-10s %-18s %7s %6s\n" "$dns" "$proto" "$domain" "$result" "${ip:--}" "$time_ms" "${http:--}"
}
# --------------- Tempdir for job outputs --------------
TMPDIR="$(mktemp -d)"
trap 'rm -rf -- "$TMPDIR"' EXIT
# Worker: write single-line result to a unique temp file for later fast parsing
dns_worker() {
local dns="$1" proto="$2" domain="$3"
local start end time out ip result http
start=$(now_ms)
if [[ "$proto" == "tcp" ]]; then
out=$(safe_dig_stdout dig +tcp +short @"$dns" "$domain")
else
out=$(safe_dig_stdout dig +short @"$dns" "$domain")
fi
end=$(now_ms)
time=$((end - start))
ip=$(printf "%s\n" "$out" | extract_ipv4)
if [[ -n "$ip" ]] && valid_ipv4 "$ip"; then
result="OK"
else
result="NO_ANSWER"
ip="-"
fi
http="-"
# atomic write to unique file
local f
f="$(mktemp "$TMPDIR/job.XXXXXX")"
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "$dns" "$proto" "$domain" "$result" "$ip" "$time" "$http" > "$f"
# also print to stdout formatted row
print_row "$dns" "$proto" "$domain" "$result" "$ip" "$time" "$http"
}
curl_worker() {
local dns="$1" domain="$2" url_override="$3"
local start end time out ip http_code result req_url
start=$(now_ms)
out=$(safe_dig_stdout dig +short @"$dns" "$domain")
ip=$(printf "%s\n" "$out" | extract_ipv4)
if [[ -z "$ip" ]]; then
out=$(safe_dig_stdout dig +tcp +short @"$dns" "$domain")
ip=$(printf "%s\n" "$out" | extract_ipv4)
fi
end=$(now_ms)
time=$((end - start))
if [[ -z "$ip" ]] || ! valid_ipv4 "$ip"; then
result="NO_ANSWER"
ip="-"
http_code="-"
else
if [[ -n "$url_override" ]]; then
req_url="$url_override"
else
req_url="https://${domain}/"
fi
http_code=$(curl_via_ip "$domain" "$ip")
if [[ "$http_code" =~ ^2[0-9]{2}$ || "$http_code" =~ ^4[0-9]{2}$ ]]; then
result="OK"
else
result="HTTP_FAIL"
fi
fi
local f
f="$(mktemp "$TMPDIR/job.XXXXXX")"
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "$dns" "-" "$domain" "$result" "${ip:--}" "$time" "${http_code:--}" > "$f"
print_row "$dns" "-" "$domain" "$result" "${ip:--}" "$time" "${http_code:--}"
}
# ------------- Parallel runner -------------
run_parallel() {
local max="$1"; shift
local -a cmds=( "$@" )
local -a pids=()
for cmd in "${cmds[@]}"; do
eval "$cmd" &
pids+=( "$!" )
if (( ${#pids[@]} >= max )); then
wait "${pids[0]}" 2>/dev/null || true
pids=( "${pids[@]:1}" )
fi
done
for pid in "${pids[@]}"; do
wait "$pid" 2>/dev/null || true
done
}
# --------------- Main ---------------
print_header
jobs=()
if (( CURL_MODE == 1 )); then
for dns in "${DNS_LIST[@]}"; do
jobs+=( "curl_worker \"$dns\" \"${DOMAINS[0]}\" \"$CURL_URL\"" )
done
else
for dns in "${DNS_LIST[@]}"; do
for proto in udp tcp; do
for domain in "${DOMAINS[@]}"; do
jobs+=( "dns_worker \"$dns\" $proto \"$domain\"" )
done
done
done
fi
run_parallel "$PARALLEL" "${jobs[@]}"
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
