راجع خيارات مأخذ على مآخذ القائمة التي أنشأتها تطبيقات أخرى؟

StackOverflow https://stackoverflow.com/questions/1618051

سؤال

وأود أن اختبار ما إذا كان قد تم تعيين معينة خيارات مأخذ على مقبس القائمة. أي كل شيء تقريبا يمكن أن تشاهد في:

#!/usr/bin/env python
'''See possible TCP socket options'''

import socket

sockettypelist = [x for x in dir(socket) if x.startswith('SO_')]
sockettypelist.sort()
for sockettype in sockettypelist:
    print sockettype

وأي شخص يعرف كيف أستطيع أن أرى الخيارات <م> القائمة مآخذ، أي تلك التي تم إنشاؤها من قبل عمليات أخرى؟ للأسف الوثائق كلها تقريبا قرأت على برمجة المقبس بيثون هو حول جعل مآخذ جديدة.

هل كانت مفيدة؟

المحلول

ومما يؤسف له، والإجابة بائع المسامير في المصيد فقط إن الخيارات مأخذ مستوى SOL_TCP ولا هم مستوى SOL_SOCKET (مثل SO_KEEPALIVE).

وبعض السفن توزيعات بعض الأمثلة جنبا إلى جنب مع systemtap. واحد منهم هو pfiles.stp التي يمكنك استخدامها للحصول على خيارات مأخذ من مآخذ من عملية التشغيل. مثال من الملف:

$ ./pfiles.stp `pgrep udevd`
   787: udevd
  Current rlimit: 32 file descriptors
   0: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3
      O_RDWR|O_LARGEFILE 
      /dev/null
   1: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3
      O_RDWR|O_LARGEFILE 
      /dev/null
   2: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3
      O_RDWR|O_LARGEFILE 
      /dev/null
   3: S_IFDIR mode:0600 dev:0,9 ino:1 uid:0 gid:0 rdev:0,0
      O_RDONLY 
      inotify
   4: S_IFSOCK mode:0777 dev:0,4 ino:2353 uid:0 gid:0 rdev:0,0
      O_RDWR 
      socket:[2353]
      SO_PASSCRED,SO_TYPE(2),SO_SNDBUF(111616),SO_RCVBUF(111616)
        sockname: AF_UNIX
   5: S_IFSOCK mode:0777 dev:0,4 ino:2354 uid:0 gid:0 rdev:0,0
      O_RDWR 
      socket:[2354]
      SO_TYPE(2),SO_SNDBUF(111616),SO_RCVBUF(33554432)
        ulocks: rcv
   6: S_IFIFO mode:0600 dev:0,6 ino:2355 uid:0 gid:0 rdev:0,0
      O_RDONLY|O_NONBLOCK 
      pipe:[2355]
   7: S_IFIFO mode:0600 dev:0,6 ino:2355 uid:0 gid:0 rdev:0,0
      O_WRONLY|O_NONBLOCK 
      pipe:[2355]

نصائح أخرى

وهذا غير ممكن في بيثون.

ونواة لينكس لا توفر آلية / procfs أن تقدم تقريرا عن الدول مأخذ TCP (على عكس BSD وغيرها يونكس مثل أنظمة التشغيل). كما نواة لا يعرض هذه المعلومات، ونحن لا يمكن أن نرى ذلك من خلال وحدة الثعبان لينكس-procfs أو ما شابه ذلك.

lsof التعليمات البند 3.14.1 :

س. لماذا لا lsof الإبلاغ عن خيارات مأخذ، الدول مأخذ، وأعلام TCP والقيم لهجتي؟ ".

A. "خيارات مأخذ، الدول مأخذ، وأعلام TCP والقيم لا تتوفر عبر نظام الملفات / إجراءات".

ولكن tapset شبكة SystemTap ويوفر نقطة توقف tcp.setsockopt والتي يمكن استخدامها لاعتراض خيارات مأخذ التي وضعتها عملية، ولكن هذا لن يتم التعامل معها في STAP بدلا من الثعبان.

وأنا خلقت tapset النحو التالي:

# Show sockets setting options

# Return enabled or disabled based on value of optval
function getstatus(optlen)
{
    if ( optlen == 1 )
        return "enabling"
    else
        return "disabling"
}

probe begin
{
    print ("\nChecking for apps making socket calls\n")
}

# See apps setting a socket option 
probe tcp.setsockopt
{
    status = getstatus(user_int($optval))
    printf ("  App '%s' (PID %d) is %s socket option %s... ", execname(), pid(), status, optstr)
}

# Check setting the socket option worked
probe tcp.setsockopt.return
{
    if ( ret == 0 )
        printf ("success")
    else
        printf ("failed")
    printf ("\n")    
}


probe end
{
    print ("\nClosing down\n")
}

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top