Script Bash: التحكم في عرض النطاق الترددي للإرسال تلقائيًا

مرحبا جميعا. هذا هو بلدي ظيفة ثانية. لا أكتب عادةً منشورات إلا إذا كان لدي شيء جيد لمشاركته وهذه المرة لديّ شيئًا سيهتم به الكثيرون بالتأكيد.

قبل بضعة أشهر كنت أفكر في إنشاء نص برمجي للحد من عرض النطاق الترددي للتطبيقات ، ولكن كان لدي بعض المشاكل والأخطاء التي جعلت الأمر صعبًا بالنسبة لي ، لذلك أثارت شكوكي في منتدى de <º DesdeLinux في حال كان لدى أي شخص فكرة.

لذلك تركتها لفترة من الوقت وقررت في يوم من الأيام استئناف النص. لقد قمت بالكثير من الاختبارات ، وقرأت الكثير عن باش ، وكان لدي صداع في أوقات فراغي ، لكنني فعلت ذلك !!

أشعر بارتياح كبير لذا قررت مشاركة نصي الصغير معك حتى تتمكن من استخدامه وتحسينه. أخطط لترخيصه بموجب GPLv3 ، لكنه أول مشروع لي ، لذا لست متأكدًا تمامًا من كيفية القيام بذلك (أحتاج إلى نصيحة من قام بذلك من قبل).

حسنًا ، سأشرح الآن ما كانت حاجتي وماذا فعلت لحل المشكلة.

SITUACION
لدي خطة إنترنت تبلغ 512 كيلو بايت ، لذلك أستخدمها انتقال كعميل BitTorrent لتنزيل الملفات الكبيرة (مثل LibreOffice وبعض توزيعات GNU / Linux). بهذه السرعة ، تستغرق التنزيلات وقتًا طويلاً وتكمن المشكلة في استخدام متصفح الويب برنامج فايرفوكس: يستغرق وقتًا طويلاً للتحميل.

عندما أقوم بالاتصال بالإنترنت ، أقوم بتنشيط حدود وقت تحميل وتنزيل Transmission وانتظر تحميل Firefox ، ثم ابدأ تشغيل التورنت مرة أخرى. كما سترون ، فإن القيام بذلك مرتين أمر شاق. ناهيك عن أنني أحيانًا أقوم بإيقاف جميع السيول مؤقتًا ثم أنسى إعادة تشغيلها مرة أخرى ، مما يؤدي إلى إهدار وقت ثمين في تحميل / تنزيل السيول.

حل
بالنسبة لهذه المشكلة ، قررت إنشاء برنامج نصي في Bash يقوم بشكل أساسي بما يلي:

1. تأكد من أن الإرسال قيد التشغيل وأنه لا يوجد سيل متوقف مؤقتًا. إذا كان الأمر كذلك ، أعد تشغيل التورنت.

2. تحقق من أن Firefox قيد التشغيل. ثم يحصل على KB / s المرسلة والمستلمة بواسطته ويحفظها في ملف.

3. إذا تجاوز تحميل / تنزيل المتصفح KB / s نطاقًا مرجعيًا ، يتم تغيير إعدادات تحميل / تنزيل الإرسال.

هذا يسمح عند الرغبة في الوصول إلى صفحة ويب ، عندما يرسل المستعرض الطلب ، يكون تحميل ملف الإرسال محدودًا وعندما يتم استلام بيانات الصفحة ، يكون التنزيل محدودًا. يعمل هذا بشكل رائع عند الوصول إلى صفحات متعددة في وقت واحد وتكون النتائج في الواقع هي نفسها مع تعطيل الإرسال.

الميزة الكبرى هي أنها تلقائية بالكامل ولا تتطلب تدخلي.

النص
على الرغم من أنه يمكن استخدامه للتحكم في استهلاك عرض النطاق الترددي لأي تطبيق ، إلا أنه في الوقت الحالي يتم كتابته فقط لحل مشكلة معينة للغاية. لكن ليس من الصعب إجراء تعديلات.

متطلبات
لكي يعمل بشكل صحيح من الضروري أن يكون التطبيق «nethogs".

في هذه الحالة ، نظرًا لأن البرنامج النصي يعمل مع Firefox و Transmission ، فمن الضروري تثبيت هذه التطبيقات ، بالإضافة إلى "Transmission-remote" ، وهو ما يغير قيم تحميل وتنزيل التورنت. أنا أيضا أستخدم في البرنامج النصي "awk". أذكرها لأنني لا أعرف ما إذا كانت جميع التوزيعات قد تم تثبيتها.

البرمجيات المستخدمة
قائمة بالتطبيقات التي يستخدمها البرنامج النصي والنظام الذي يعمل فيه.

• ديبيان جنو / لينكس 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• ناقل الحركة 2.03 (11030)
• Nethogs 0.7.0

إعدام
يجب تشغيله كجذر لأن nethogs لا يمكن تشغيله إلا مع هذا المستخدم ، ولكن انتقال عن بعد يتم تنفيذه مع المستخدم العادي عن طريق الأمر سو.

يستخدم البرنامج النصي الأمر الداخلي Bash فخ من خلالها يمكن استعادة القيم الافتراضية لتحميل / تفريغ الإرسال ، عندما يتم إيقافها عن طريق إشارات SIGINT (CTRL + c) أو SIGTERM.

ما زلت غير متأكد من كيفية القيام بتشغيله عند بدء التشغيل والتوقف عند إيقاف تشغيل الكمبيوتر أو إعادة تشغيله. كنت أفكر في وضع رابط في الملف /etc/rc.local لكنني لا أعرف ما إذا كان سيعمل ، ولا أفهم حقًا كيف / إلخ / يعملالحرف د (رأيت بعض النصوص الموجودة هناك ، حتى هيكل عظمي، لكني لا أفهمهم). إذا استطاع أي شخص مساعدتي ، سأكون ممتنًا جدًا.

حسنًا يا رفاق ، هذا كل شيء. آمل أن تكون مساهمتي الصغيرة مفيدة لك ويمكنك تحسينها إذا كنت ترغب في ذلك. سأكون سعيدًا بقراءة آرائك وتوصياتك بالإضافة إلى الاقتراحات في حالة وجود مشاكل أمنية في الملف (أنا لست مبرمجًا ، فأنا أقوم فقط ببعض الأشياء من وقت لآخر).

أعلم أنه مع بعض الإصلاحات يمكن أن يصبح تطبيقًا رائعًا في المستقبل ، لأنني لا أعرف أي برنامج يفعل نفس الشيء. على سبيل المثال ، يحدث لي أنه يمكنني الحصول على واجهة رسومية بتنسيق سخاء وللتمكن من اختيار التطبيقات التي نريد تحديد أولوياتها في استخدام النطاق الترددي (متصفح الويب ، ومدير التحديث ، ونقل الملفات ، وما إلى ذلك) والقيم المرجعية المختلفة. نعم ، إنه طموح إلى حد ما ، لكنه مفيد للغاية.

يمكنك تنزيل البرنامج النصي بتنسيق لصق. شكرا جزيلا على القراءة !!


23 تعليقات ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   إيلاف قال

    يا! ممتع 😀

    1.    إليوتيمي 3000 قال

      في الزاوية اليسرى السفلية لديك خيار تحديد النطاق الترددي الذي يستهلكه الإرسال في التحميل والتنزيل. مع ناقل الحركة لم أواجه أي مشكلة معه.

      1.    كوكي قال

        لكن هذا تلقائي ، وهناك أيضًا ناقل حركة بدون واجهة رسومية ، لذلك قد لا تكون هذه الوظيفة في متناول اليد.

      2.    خواكين قال

        مرحبا، كيف حالك.
        نعم أنا أعرف ذلك بالفعل. لكن هذا بالضبط ما لا أريد القيام به.
        لدي خطة إنترنت سيئة للغاية (512 كيلو بايت وهي الأفضل في منطقتي).

        مع البرنامج النصي الخاص بي ، لا أقلق بشأن القيام بكل شيء يدويًا. تخيل أنك فتحت صفحة في المتصفح وأن الإرسال يشغل كامل النطاق الترددي في تلك اللحظة ، لذلك يستغرق تحميل الصفحة بعض الوقت (1 ′ على الأكثر ، ولكنه أمر مزعج). انتهيت من "تفعيل الحدود الزمنية" كل دقيقتين. هذا تلقائي وفوري تقريبًا (يتحقق من KB المرسل والمستقبل بواسطة Firefox كل 5 ثوانٍ).

        حقًا في حالتي مع سرعة الإنترنت هذه ، إنه ممتاز. كما أنني لا أعرف تطبيقًا آخر يقوم بهذا ، وإلا لما قام بذلك. تلك التي رأيتها تحد فقط من النطاق الترددي ، ولكن ليس تلقائيًا.

        آمل أن أكون واضحا. شكرا لقرائتك!

        1.    خواكين قال

          أسف، كنت مخطئا. إنها ليست 512 كيلو بايت ، بل هي كيلو بايت. (أي 1/2 "ميجا"). الحد الأقصى الذي يمكنني تنزيله هو 75 كيلوبايت / ثانية و 50 كيلوبايت / ثانية للتحميل. هذا عندما يكون الإنترنت جيدًا ، وإلا فإن المعدل الطبيعي هو 48 و 23.

    2.    خواكين قال

      بفضل!

  2.   كوكي قال

    مثير للاهتمام ، أنا أستخدم qBittorrent وأستخدم مفتاح الحدود.

    المنشور يبدو لطيفا مع تلك الألوان 😉

    1.    خواكين قال

      شكرا على الألوان. أنا لست جيدًا في ذلك ، يبدو طويلًا ومملًا مع الكثير من النصوص.

  3.   خورخي قال

    أنا شخصياً أستخدم برنامج الإرسال الخفي وفايرفوكس مع علامة تبويب تطبيق مباشر ، لذلك لا أمشي مع البرامج الخارجية أو أنسى متابعة السيول أو السلاحف النشطة (ويمكنني التحكم فيها من هاتفي). لبدء خدمة ، تتم إضافة مستخدم (على سبيل المثال: adduser –disabled-password nethogs) ، يتم إنشاء ملف نصي للبرنامج الخفي في /etc/init.d باسم (على سبيل المثال: nethogs-daemon) ثم في دبيان اكتب "update-rc.d nethogs-daemon defaults" بحيث يبدأ من تلقاء نفسه.

    الملف النصي هو برنامج نصي باش أيضًا ، والذي يمكنك دمج البرنامج النصي فيه.
    معرفة ما إذا كان هذا يمكن أن يساعدك ، يمكن استخدامه لبدء عملية النقل الخفي ، يمكن استخدامه لبدء nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    خواكين قال

      مرحبا!
      دعنا نرى ما إذا كنت أفهم: هذا هو بدء الإرسال عند بدء التشغيل وإيقافه عند إيقاف التشغيل أو إعادة التشغيل. مع ذلك ، ليس لدي أي مشاكل لأنه يبدأ دائمًا من تلقاء نفسه ويبدأ التنزيل (أضفته إلى التطبيقات عند بدء التشغيل في Xfce).

      مشكلتي هي أنني إذا وضعت النص في rc.local أو في init.d فأنا لا أعرف كيف يوقف الكمبيوتر البرنامج النصي. هذا ، من الواضح أنه عند إيقاف تشغيل / إعادة تشغيل جهاز الكمبيوتر ، يتم إنهاء جميع العمليات (ومعها ناقل الحركة و Nethogs أيضًا) لكنني لا أعرف ما الذي سيحدث للبرنامج النصي الخاص بي.

      ولماذا يزعجني ذلك؟ يقوم البرنامج النصي بإنشاء ملف في / tmp ويتحكم في سرعة الإرسال. إذا قمت بتشغيله في محطة طرفية وأوقفته فجأة (على سبيل المثال باستخدام CTRL + c) ، فإن البرنامج النصي قبل الإغلاق يستعيد السرعات الافتراضية (في حالة الضرورة) ثم يوقف Nethogs ويحذف الملف من / tmp. حاولت أن أجعله "احترافيًا" قدر الإمكان حتى لا يترك أي ملفات أو عمليات في الخلفية.

      حول ما قلته ، لم أفهم ما هي "علامة تبويب التطبيق المباشر".

      1.    خورخي قال

        علامة تبويب التطبيق هي علامة تبويب دائمة ، فهي مفتوحة دائمًا ومُصغرة داخل Firefox http://i.imgur.com/a5i0aP3.png (القائمة السياقية في علامة التبويب ، انقر فوق «لصق علامة التبويب»). عندما يرسل الشياطين إشارة TERM فإنهم ينتظرون بعض الوقت ، حتى بعد إغلاق الجلسة ، ويحفظون بياناتهم. لاحظ أنه في الرابط الذي قدمته من قبل عند الخروج من البرنامج النصي يستدعي start-stop-daemon ويخبر الإرسال بالتوقف ، هناك يمكنك لصق "killall nethogs" وما يحتوي عليه StopScript. النص الأولي في هذه الحالة يجب أن تسميه كجذر بدلاً من مستخدم معين ، لأنه يحتاج إلى امتيازات.

        1.    خواكين قال

          حسنا شكرا للنصيحة حالما يكون لدي الوقت أحاول ذلك!

  4.   فاكوندو قال

    رائع ، لقد واجهت هذا العيب لأنه حتى إذا كان لديك اتصال سريع ، فأنت مجبر على تقييد الإرسال بينما تريد التصفح وبالتالي "إضاعة" الوقت.
    سأحاول ذلك عندما أستطيع. تحياتي وشكر !!

    1.    خواكين قال

      شكرا لك! نأمل أن يكون هذا يمكن أن تساعدك!

      1.    فاكوندو قال

        مرحبًا مرة أخرى Joaquin. أرى أنك تهتم بالرد على جميع التعليقات ، لذا سأستفيد من ذلك وسأطرح عليك بضعة أسئلة مبتدئة.
        أولاً ، كيف أعرف ما إذا كان البرنامج النصي "awk" مثبتًا لدي؟ أستخدم Debian 7.2.
        ثانيًا ، لا أعرف ماذا أفعل برمز اللصق. لا بد لي من الحصول على محرر نصوص وحفظه في ملف يسمى "bandwidth-controller.sh" ثم تشغيله كـ "./band-width-control.sh". هذا هو الجزء الذي أشعر فيه بالضياع.
        ثالثًا: عندما تقول لتشغيله كجذر ، هل من الضروري التغيير من مستخدم إلى جذر أم أنه يكفي مع sudo؟

        إذا كان لديك أي قراءة لتوصيني بشأن هذا الموضوع ، فأنا أقدر ذلك.
        تحيات!

  5.   جيسكارد قال

    لهذا السبب أقوم دائمًا بإلغاء تثبيت Transmission وتثبيت Deluge. حسنًا ، من أجل ذلك والمزيد من الأشياء التي يقدمها لي Deluge والتي لا يجلبها لي الآخر.

    1.    خواكين قال

      مرحبًا ، لا أعرف Deluge. مشكلتي الرئيسية هي خدمة الإنترنت. مع هذا أضغط عليه على أكمل وجه.

  6.   الباندا قال

    مرحبا. عرض النطاق الترددي الخاص بي محدود أيضًا لذا جربت هذا البرنامج النصي. لكنها لا تعمل. يبدو أن الخطأ في الأمر nethogs -t. يقوم بإرجاع الخطأ "في انتظار وصول الحزمة الأولى (انظر خطأ sourceforge.net 1019381)" وحاولت mint و archlinux ولا شيء. ما الذي يفترض أن يعود هذا الأمر؟ أفترض أنني يجب أن أطبع عرض النطاق الترددي المستخدم من قبل كل تطبيق بنص عادي. هل تعرف برنامج آخر يسمح لك بالاستماع للشبكة؟

    1.    خواكين قال

      مرحبا، كيف حالك.
      هذا هو خطأ Nethogs. يبدو لي أيضًا ، لكنه يعمل على أي حال.

      ما يفعله Nethogs هو إظهار العمليات التي تستهلك أكبر قدر من النطاق الترددي ، في الوقت الفعلي. في البرنامج النصي ، يتم حفظ مخرجاته في ملف نصي "net.list" ، بحيث يمكن تصفيته لاحقًا.

      يعمل البرنامج النصي فقط مع Transmission (عميل BitTorrent) و Firefox (متصفح الويب). ما يفعله هو الحد من النطاق الترددي للإرسال عندما يقوم Firefox بتحميل صفحة ويب. تحتاج إلى تثبيت: Nethogs و Transmission و Transmission-remote و Firefox.

      تم شرح كل شيء في المنشور ، لذلك لا أعرف ما هي مشكلتك.

      ملاحظة: الرجاء الكتابة بشكل صحيح وتحسين التهجئة. إنه تعليق وليس رسالة نصية.

      1.    الباندا قال

        البرنامج النصي لا يعمل معي. يطبع رسالة الخطأ هذه عدة مرات. قم بتشغيل "nethogs -t" في المحطة لمعرفة ما يفعله ولكنه لا يطبع أي شيء ، فقط الخطأ. على جهاز الكمبيوتر الخاص بي لا يعمل. أتخيل أنه يجب أن تطبع شيئًا مشابهًا لما تطبعه عند تنفيذه بدون -t ، مع إظهار العمليات وعرض النطاق الترددي. لكن في حالتي لا يطبع أيًا من ذلك. ما التوزيعات التي استخدمتها لتطوير البرنامج النصي؟

        1.    خواكين قال

          إذا نظرت عن كثب ، فإن المنشور يحتوي على جميع البرامج المستخدمة وإصداراتها. لا أعرف لماذا الخطأ ، ولكن يبدو لي في كل مرة يتم تشغيل "nethogs -t". في البرنامج النصي سيحدث كل 2.

          قد يكون الأمر أنه عند تشغيل nethogs ، لا توجد عملية باستخدام الشبكة وهذا هو السبب في أنك لا تحصل على أي إخراج.

          يجب تشغيل البرنامج النصي كجذر لأن nethogs يحتاج إلى أن يعمل هذا المستخدم.

          الآن تذكرت شيئًا مهمًا وأعرف سبب عدم نجاحه بالنسبة لك:

          يجب عليك تحرير البرنامج النصي وتغيير اسم المستخدم العادي. في البرنامج النصي يسمى "joaquin". يجب عليك تغييره إلى اسم المستخدم الخاص بك.

          آسف لم أكن أدرك ذلك ، كان يجب أن أضع الاسم في متغير. ما يحدث هو أنني لم أفكر في جعلها عامة ، أردت فقط أن أعرضها لك حتى تتمكن من رؤيتها ويمكن لمن يريد الحصول على أفكار حول كيفية القيام بذلك. لم أفعل ذلك بقصد أن يعمل على أي جهاز كمبيوتر ، وهذا يستغرق وقتًا ولا أعرف كيفية البرمجة ، تحدث بعض الأشياء لي.

          حظا سعيدا أي شيء يسأل مرة أخرى. ويرجى قراءة المنشور وتعليقات النص مرة أخرى.

  7.   فاكوندو قال

    مرحبًا Joaquín ، أخبرني ما يلي:

    الإرسال عن بعد: (http://localhost:9091/transmission/rpc/) تعذر الاتصال بالخادم
    فشل ioctl أثناء إنشاء IP محلي للجهاز المحدد eth0. يمكنك تحديد الجهاز في سطر الأوامر.

    أيه أفكار؟؟ شكرا!

    1.    خواكين قال

      مرحبا، كيف حالك.
      عفوا لكن ليس لدي فكرة 😀
      مما أفهمه الخطأ يقول ، إنها مشكلة في ioctl ، لكنني لا أعرف ما هو.

      ربما يمكنك محاولة إيقاف البرنامج النصي ومعرفة ما إذا كان جهاز التحكم عن بعد يعمل مع بعض خياراته (اقرأ صفحة الدليل باستخدام الأمر "man").