Учетная запись сокета Unix в Python

Как выполняется передача учетных данных сокета Unix в Python?

  • Авто вводить фразу участника в случае Python ssl Client / Server
  • Определить текущее количество задержек в очереди TCP listen ()
  • Как я могу ответить на запрос метода CONNECT на прокси-сервере, используя сокет в python?
  • recv / send on raw socket перед SSL wrap (), Python
  • Python socket.accept неблокируется?
  • Python SocketServer: отправка нескольким клиентам?
  • Подключение к себе через мой публичный IP-адрес через TCP
  • Обнаружение зависания сокета без отправки или получения?
  • One Solution collect form web for “Учетная запись сокета Unix в Python”

    Поиски в Интернете по этой теме принесли удивительно мало результатов. Я решил, что поставил бы вопрос и ответ на этот вопрос для других, интересующихся этой темой.

    Следующие клиентские и серверные приложения демонстрируют, как это сделать в Linux со стандартным интерпретатором python. Никаких расширений не требуется, но из-за использования встроенных констант код зависит от Linux.

    Сервер:

    #!/usr/bin/env python import struct from socket import socket, AF_UNIX, SOCK_STREAM, SOL_SOCKET SO_PEERCRED = 17 # Pulled from /usr/include/asm-generic/socket.h s = socket(AF_UNIX, SOCK_STREAM) s.bind('/tmp/pass_cred') s.listen(1) conn, addr = s.accept() creds = conn.getsockopt(SOL_SOCKET, SO_PEERCRED, struct.calcsize('3i')) pid, uid, gid = struct.unpack('3i',creds) print 'pid: %d, uid: %d, gid %d' % (pid, uid, gid) 

    Клиент:

     #!/usr/bin/env python from socket import socket, AF_UNIX, SOCK_STREAM, SOL_SOCKET SO_PASSCRED = 16 # Pulled from /usr/include/asm-generic/socket.h s = socket(AF_UNIX, SOCK_STREAM) s.setsockopt(SOL_SOCKET, SO_PASSCRED, 1) s.connect('/tmp/pass_cred') s.close() 

    К сожалению, константы SO_PEERCRED и SO_PASSCRED не экспортируются модулем сокета python, поэтому их необходимо ввести вручную. Хотя это значение вряд ли изменится, это возможно. Это следует учитывать в любых приложениях, использующих этот подход.

    Python - лучший язык программирования в мире.