msasanmh / SecureDNSClient

A DNS Client Supporting DNSCrypt, Anonymized DNSCrypt, DoH, DoT, UDP And TCP.
https://msasanmh.github.io/SecureDNSClient/
GNU General Public License v3.0
814 stars 80 forks source link

save DNSs #53

Closed abbaszahiri closed 1 year ago

abbaszahiri commented 1 year ago

سلام

abbaszahiri commented 1 year ago

امکانش نیست براتون که یافته ها را ذخیره کنید که هر بار از اول کل شبکه را Scan نکند؟ مثلا وقتی امروز یک بار برنامه را باز کردیم و گشت و DNS ها را پیدا کرد ، دوباره بستیم و باز کردیم از اول همه کارها را انجام ندیم و حداقل لیست DNS ها را در یک فایل ذخیره داشته باشد و بدون Scan رجوع کند به فایل قبلی خودش

ghost commented 1 year ago

سلام. کلاینت برای جلوگیری از فیلتر شدن آدرس‌های DoH مربوط به سرورهای DNS لیست داخلیشو ذخیره نمیکنه. ولی لزومی هم نداره که شما تمامی آدرس‌های موجود رو اسکن کنید. بعد از اینکه مثلا 10 آدرس DoH پیدا کرد، اسکن رو متوقف کنید و از تب Connect به اون سرورها کانکت بشید.

abbaszahiri commented 1 year ago

طرز کارش رو میدونم . درد اینه که من مدام مجبورم سایفون را وصل کنم و دوباره securedns را فعال کنم. اگه میشد حداقل بشه با یه پروکسی هم از گیر این آی پی مزخرف ایران خلاص شد بدرد بخور میشد. تا میخوام سایفون را فعال کنم این غیرفعال میشه

abbaszahiri commented 1 year ago

دوباره باید بقول شما ده تا سرور را بگرده تا پیدا کنه. خب لازم نیست که تو فایل متنی ذخیره کنید که راحت باز بشه که. میشه تو فایل باینری ذخیره کنید که فقط برنامه بتونه بخونه. البته تا همینجاشم قدر زحمتهای شما رو میدونم. ولی اگه این اضافه میشد خودش خیلی مهم بود.

msasanmh commented 1 year ago

دوباره باید بقول شما ده تا سرور را بگرده تا پیدا کنه. خب لازم نیست که تو فایل متنی ذخیره کنید که راحت باز بشه که. میشه تو فایل باینری ذخیره کنید که فقط برنامه بتونه بخونه. البته تا همینجاشم قدر زحمتهای شما رو میدونم. ولی اگه این اضافه میشد خودش خیلی مهم بود.

سلام، این کار رو میتونم انجام بدم اما حقیقتش فکر نمی‌کنم ایده خوبی باشه، چون اینترنت ایران بدجور وضعش خرابه، سرورهایی که امروز برنامه پیدا میکنه و بهش وصل میشه ممکنه فردا نتونه بهشون وصل بشه یا برعکس. اجازه بدید یه کمی روش فکر کنم، اگه بشه به روشی انجامش داد که از پایداری برنامه کم نکنه انجامش میدم.

msasanmh commented 1 year ago

دوباره باید بقول شما ده تا سرور را بگرده تا پیدا کنه. خب لازم نیست که تو فایل متنی ذخیره کنید که راحت باز بشه که. میشه تو فایل باینری ذخیره کنید که فقط برنامه بتونه بخونه. البته تا همینجاشم قدر زحمتهای شما رو میدونم. ولی اگه این اضافه میشد خودش خیلی مهم بود.

هم اینکه میتونید کانکت شدن بدون چک کردن سرورها رو تست کنید. تب connect گزینه دوم رو تست کنید.

abbaszahiri commented 1 year ago

اول اینکه میدونی و میدونم که تاج سری و استاد مایی. راه حل خوب اینه که یه فایل باینری داشته باشید که ازش dns های خوب را انتخاب کنید . بعد این فایل را در ۳ صورت بروز کنه. اول اینکه اگر کاربر کلید چک سرور را زد تابعش فراخوانی بشه. دوم وقتی که مثلا فقط دو تا دی ان اس دیگه جواب میده و عن قریبه که سیستم از کار بیفته! سوم وقتی فراخوانی بشه که یک ساعت از تایم باز بودن برنامه گذشته. با یه تایمر حله داستان. مورد بعدی اینکه موقع چک سرورهای جدید نباید ترافیک بیفته.یعنی اینکه همینجور پشت سر هم درخواست نده. تایمر راه حله. تو تابع تایمر میشه موازی با اجرای برنامه همه کار کرد. چند تا تایمر با زمانهای مختلف نیازه فقط.

abbaszahiri commented 1 year ago

اینجوری دیگه اصلا نیاز نیست هر بار کاربر وقت بذاره و لیست جدید بدست بیاره. آخرشم بعد یه ساعت که برنامه اش باز موند، از کار بیفته. یا اگه سرور داره و این برنامه روش اجراست هر بار دستی بره چک سرور کنه. خودش لیستش را بروز میکنه . میتونه سرویس مجزایی واسه این کار داشته باشه. نکته اس اینه که همزمان با اینکه برنامه dnsقبلی را تنطیم کرده و داره طرف کار میکنه، اون سرویسه باید dns تنظیم شده را ignoreکنه .

abbaszahiri commented 1 year ago

من ازباب کمک گفتم. حتما شما که ریزه کاری های برنامه دستتون هست، محدودیت هایی دارید. هر وقت اون محدودیت ها رو تونستید کنترل کنید، احتمالا یه برنامه ای بشه که فقط یه گزینه dpi داشته باشه که اگه کسی نخواست خودش اون رو غیرفعال کنه و فقط از dns استفاده کرده باشه. چیزی که بدرد شخص من میخوره، اینه که dns را پیدا و تنظیم کنه و بعدم بتونه مثلا با پراکسی سایفون وصل بشه تا اون سایت های فیلتر از تو پروکسی رد بشه و امثال یوتیوب بدون پروکسی رد بشه

abbaszahiri commented 1 year ago

رویهم رفته دمت گرم خیلی آقا و گلی

msasanmh commented 1 year ago

اول اینکه میدونی و میدونم که تاج سری و استاد مایی. راه حل خوب اینه که یه فایل باینری داشته باشید که ازش dns های خوب را انتخاب کنید . بعد این فایل را در ۳ صورت بروز کنه. اول اینکه اگر کاربر کلید چک سرور را زد تابعش فراخوانی بشه. دوم وقتی که مثلا فقط دو تا دی ان اس دیگه جواب میده و عن قریبه که سیستم از کار بیفته! سوم وقتی فراخوانی بشه که یک ساعت از تایم باز بودن برنامه گذشته. با یه تایمر حله داستان. مورد بعدی اینکه موقع چک سرورهای جدید نباید ترافیک بیفته.یعنی اینکه همینجور پشت سر هم درخواست نده. تایمر راه حله. تو تابع تایمر میشه موازی با اجرای برنامه همه کار کرد. چند تا تایمر با زمانهای مختلف نیازه فقط.

قسمت دوم، منظورت اینه که سرورها بصورت موازی چک بشن تا سرعت چک افزایش پیدا کنه؟

msasanmh commented 1 year ago

اینجوری دیگه اصلا نیاز نیست هر بار کاربر وقت بذاره و لیست جدید بدست بیاره. آخرشم بعد یه ساعت که برنامه اش باز موند، از کار بیفته. یا اگه سرور داره و این برنامه روش اجراست هر بار دستی بره چک سرور کنه. خودش لیستش را بروز میکنه . میتونه سرویس مجزایی واسه این کار داشته باشه. نکته اس اینه که همزمان با اینکه برنامه dnsقبلی را تنطیم کرده و داره طرف کار میکنه، اون سرویسه باید dns تنظیم شده را ignoreکنه .

همین الانشم dns ست شده رو ایگنور میکنه و از Bootstrap استفاده میکنه.

msasanmh commented 1 year ago

من ازباب کمک گفتم. حتما شما که ریزه کاری های برنامه دستتون هست، محدودیت هایی دارید. هر وقت اون محدودیت ها رو تونستید کنترل کنید، احتمالا یه برنامه ای بشه که فقط یه گزینه dpi داشته باشه که اگه کسی نخواست خودش اون رو غیرفعال کنه و فقط از dns استفاده کرده باشه. چیزی که بدرد شخص من میخوره، اینه که dns را پیدا و تنظیم کنه و بعدم بتونه مثلا با پراکسی سایفون وصل بشه تا اون سایت های فیلتر از تو پروکسی رد بشه و امثال یوتیوب بدون پروکسی رد بشه

خب برای قسمت اول که اگه کسی dpi نخواد راحت میتونه چک مربوطه رو برداره. قسمت دوم هم پیشنهاد خیلی خوبیه که یه فیچر جدید بحساب میاد. حتما روش کار میکنم.

abbaszahiri commented 1 year ago

آفرین. فرضا الان توی سیستم مثلا dns هتزنر نصب شده و کاربر داره باهاش کار میکنه و حتی آنتی dpi هم داره کار میکنه.

یک فایل میتونه بین دوتا برنامه مجزا اشتراکی استفاده بشه.

یه برنامه دیگه لازمه که این فایل سرورها را بروز کنه و اصلا تنظیمات فعلی سیستم را دستش نزنه. تو تایمر هر چند وقت (که خودت عددش رو صلاح میدونی)، چک کنه سرورها رو فایل رو بروز نگه داره. برنامه اصلی فقط این فایل را بخونه هر ساعت و اجرا کنه دیگه. دو تا برنامه است. یکیش حالت سرویس پیدا میکنه. میشه با باز و بسته شدن یک برنامه اون یکی را هم باز و بسته کرد.

abbaszahiri commented 1 year ago

بین دو تا برنامه که موازی با هم کار میکنند، به راحتی میتوان حافظه اشتراکی فایل را استفاده کرد بدون اینکه مشکل ناحیه بحرانی (Critical Section) بوجود بیاد و سر اون حافظه اصطلاحا دعوا بشه. یکی فایل را مینویسه. اون یکی فقط میخونه!

میشه مالتی ترد هم کار کنید ولی سرویس سریعتره

موفق و پیروز باشید

msasanmh commented 1 year ago

آفرین. فرضا الان توی سیستم مثلا dns هتزنر نصب شده و کاربر داره باهاش کار میکنه و حتی آنتی dpi هم داره کار میکنه.

یک فایل میتونه بین دوتا برنامه مجزا اشتراکی استفاده بشه.

یه برنامه دیگه لازمه که این فایل سرورها را بروز کنه و اصلا تنظیمات فعلی سیستم را دستش نزنه. تو تایمر هر چند وقت (که خودت عددش رو صلاح میدونی)، چک کنه سرورها رو فایل رو بروز نگه داره. برنامه اصلی فقط این فایل را بخونه هر ساعت و اجرا کنه دیگه. دو تا برنامه است. یکیش حالت سرویس پیدا میکنه. میشه با باز و بسته شدن یک برنامه اون یکی را هم باز و بسته کرد.

همین کارو میتونم توی خود همین برنامه هم انجام بدم نیاز به برنامه واسط نیست

abbaszahiri commented 1 year ago

ok

msasanmh commented 1 year ago

بین دو تا برنامه که موازی با هم کار میکنند، به راحتی میتوان حافظه اشتراکی فایل را استفاده کرد بدون اینکه مشکل ناحیه بحرانی (Critical Section) بوجود بیاد و سر اون حافظه اصطلاحا دعوا بشه. یکی فایل را مینویسه. اون یکی فقط میخونه!

میشه مالتی ترد هم کار کنید ولی سرویس سریعتره

موفق و پیروز باشید

روش کار میکنم، باید تست‌های زیادی بزنم تا از کارکرد درستش مطمئن بشم، بعد روی برنامه پیاده میکنم. در چند تا ورژن بعدی.

abbaszahiri commented 1 year ago

فقط تو یه حافظه مجزا همه سرورها و اطلاعاتشون را پیدا کن. همه چیز که ۱۰۰٪ نهایی شد ، تو یک لحظه تو اون فایل بنویس. قبل از نوشتن یه فلگی چیزی را تنظیم کن که اونی که داره از فایل میخونه بفهمه الان فایل داره آپدیت میشه تا مشکل همزمانی دسترسی پیش نیاد. حرفم اینه

msasanmh commented 1 year ago

فقط تو یه حافظه مجزا همه سرورها و اطلاعاتشون را پیدا کن. همه چیز که ۱۰۰٪ نهایی شد ، تو یک لحظه تو اون فایل بنویس. قبل از نوشتن یه فلگی چیزی را تنظیم کن که اونی که داره از فایل میخونه بفهمه الان فایل داره آپدیت میشه تا مشکل همزمانی دسترسی پیش نیاد. حرفم اینه

این مشکل رو خیلی راحت میشه با به اشتراک گذاری فایل موقع رایت شدن حل کرد. حواسم هست.

abbaszahiri commented 1 year ago

کلا به راحتی میشه دو تا کار را موازی انجام داد. مشروط به اینکه اون حافظه ای که بین دو تا thread مشترک هست را بتونی کنترل کنی که مورد دسترسی همزمان واقع نشه. اینجوری برنامه مثل چی کار میکنه و سرعتشم بیشتر میشه. فقط موقع دسترسی به اون حافظه اشتراکی باید یه فلگی حداقل باشه که چک کنه و صبر کنه تا اون یکی thread کارش تموم بشه و بعد این بخونه

abbaszahiri commented 1 year ago

بهش میگیم: race condition

Critical Section

abbaszahiri commented 1 year ago

ببخش مزاحمت شدم من رفتم دیگه

msasanmh commented 1 year ago

بهش میگیم: race condition

Critical Section

بلدم داداش، اتفاقا ایده خیلی خوبی دادی. ممنون.

msasanmh commented 1 year ago

ببخش مزاحمت شدم من رفتم دیگه

خواهش میکنم.

msasanmh commented 1 year ago

انجام شد.

abbaszahiri commented 1 year ago

You are prefect :)

abbaszahiri commented 1 year ago

چطور میشه ازش به عنوان یک SmartDNSاستفاده کرد؟

فرض کن من با موبایل میخوام تو PrivateDNS بزنم آدرس کامپیوتر خونه را!

شدنی هست؟

abbaszahiri commented 1 year ago

اگر میشد یک سرور dns اسمارت خونگی داشتیم که روی پورت ۵۳ همیشه گوش میکرد و جواب میداد.

در واقع برنامه dns کلا از برنامه dpi جدا میشد یا تو همین برنامه دو تا پورت جداگونه میداشت خیلی بهتر بود.

msasanmh commented 1 year ago

چطور میشه ازش به عنوان یک SmartDNSاستفاده کرد؟

فرض کن من با موبایل میخوام تو PrivateDNS بزنم آدرس کامپیوتر خونه را!

شدنی هست؟

میتونی توی موبایل از آدرس dns، doh و پراکسی که برنامه بهت میده استفاده کنی. اما جریان smart dns کلا چیز دیگه ایه، کلا سمت سرور انجام میشه نه کلاینت.

msasanmh commented 1 year ago

اگر میشد یک سرور dns اسمارت خونگی داشتیم که روی پورت ۵۳ همیشه گوش میکرد و جواب میداد.

در واقع برنامه dns کلا از برنامه dpi جدا میشد یا تو همین برنامه دو تا پورت جداگونه میداشت خیلی بهتر بود.

همین الانم میتونی این کارو انجام بدی، نیاز نیست اصلا dpi رو اجرا کنی. وقتی dns کانکت هست یعنی شما روی ip خونه تون یه سرور DNS دارید.

abbaszahiri commented 1 year ago

من یه کامپیوتر لینوکسی تو خونه دارم که دائم روشنه و به نت وصله. در واقع یه برد رسپری پای هست. مصرفی هم‌نداره خیلی ایده آله.

نهایتا میخوام به این برسم که روش یه اسمارت دی ان اس داشته باشم که خودش آی پی ها را کش کنه و دفعه بعد دیگه کلا درخپاست تبدیل اون اون آدرس نره به هیچ دی ان اسی. یعنی یک بار در هر روز این‌کار انجام بشه نه بیشتر. واسه گیم خیلی خدا میشه اینجوری.

فعلا بهترین چیزی که هست همین مال شماست. doh که فرمودید را چک میکنم. جایی مثالی هست ازش؟ توی اون private dns موبایل باید آدرس کامپیوتر را بزنم ؟

abbaszahiri commented 1 year ago

کلا خیلی خوب بود یه چند صفحه خلاصه عملکرد جایی بود برم بخونم.

msasanmh commented 1 year ago

من یه کامپیوتر لینوکسی تو خونه دارم که دائم روشنه و به نت وصله. در واقع یه برد رسپری پای هست. مصرفی هم‌نداره خیلی ایده آله.

نهایتا میخوام به این برسم که روش یه اسمارت دی ان اس داشته باشم که خودش آی پی ها را کش کنه و دفعه بعد دیگه کلا درخپاست تبدیل اون اون آدرس نره به هیچ دی ان اسی. یعنی یک بار در هر روز این‌کار انجام بشه نه بیشتر. واسه گیم خیلی خدا میشه اینجوری.

فعلا بهترین چیزی که هست همین مال شماست. doh که فرمودید را چک میکنم. جایی مثالی هست ازش؟ توی اون private dns موبایل باید آدرس کامپیوتر را بزنم ؟

این برنامه که نسخه لینوکس نداره. برای گوشی قسمت private dns هیچ‌وقت با هیچ سروری خوب کار نمیکنه. کلا باگ اندرویده. بهتره از کلاینت Intra استفاده کنید و آدرس doh لوکال که برنامه بهت میده رو داخل اینترا وارد کنی.

دوست داری یه issue جدید باز کن شاید بچه‌های دیگه دیدن و تونستن راهنمایی کنن. چون این issue بسته شده.

abbaszahiri commented 1 year ago

دمت گرم چه برنامه خوبی معرفی کردی. intra را نصب کردم. کار باهاشم ساده به نظر میرسه. https://192.168.1.2/dns-query را داخلش زدم. ولی متاسفانه حالا نمیدونم تو کلاینت شما چی رو کجا تغییر بدم....

abbaszahiri commented 1 year ago

این رو راهنمایی کنید. چشم واسه اون بحث smartdns یه issue جدید دارم باز میکنم کاملا بحثش فرمودید مجزاست

msasanmh commented 1 year ago

دمت گرم چه برنامه خوبی معرفی کردی. intra را نصب کردم. کار باهاشم ساده به نظر میرسه. https://192.168.1.2/dns-query را داخلش زدم. ولی متاسفانه حالا نمیدونم تو کلاینت شما چی رو کجا تغییر بدم....

فقط باید از Settings -> Working mode گزینه دوم رو انتخاب کنید، موقع کانکت درخواست نصب certificate میکنه که باید yes بزنید تا کار کنه. همچنین فایروال هم باید اجازه فعالیت برنامه داخل شبکه رو بده

abbaszahiri commented 1 year ago

working mode را توی تنظیمات گذاشتم. از اول سرچ کرد، ۱۲۵ تا روی مخابرات پیدا کرد. بعد دیگه غیر از tab چهارم، بقیه را به ترتیب فعال کردم. بازم intra موبایل بهش وصل نشد.

msasanmh commented 1 year ago

working mode را توی تنظیمات گذاشتم. از اول سرچ کرد، ۱۲۵ تا روی مخابرات پیدا کرد. بعد دیگه غیر از tab چهارم، بقیه را به ترتیب فعال کردم. بازم intra موبایل بهش وصل نشد.

دقیقا همون آدرسی رو داخل اینترا بنویس که برنامه توی لاگ زمانیکه کانکت شده نشون میده. محاله کار نکنه، اگه آدرس رو درست وارد کردی فایروال رو چک کن. یکی از دوستان همین مشکل رو داشت، بهش گفتم قوانین مربوط به برنامه رو از داخل فایروال پاک کنه تا فایروال دوباره اون باکس رو نشون بده که میخوای به برنامه اجازه فعالیت بدی یا نه. این کارو انجام داد و کارش درست شد.