Что такое код getservbyport

getservbyport

getservbyport — Get Internet service which corresponds to port and protocol

Описание

getservbyport() returns the Internet service associated with port for the specified protocol as per /etc/services .

Список параметров

The port number.

protocol is either «tcp» or «udp» (in lowercase).

Возвращаемые значения

Returns the Internet service name as a string.

Смотрите также

  • getservbyname() — Get port number associated with an Internet service and protocol

Manual:

Reference:

Contact:

  • Site maintained by
    Jon Allen (JJ)
  • Last updated on
    23 December 2007
  • See the project page for more details
  • getservbyport PORT,PROTO

These routines perform the same functions as their counterparts in the system library. In list context, the return values from the various get routines are as follows:

(If the entry doesn’t exist you get a null list.)

The exact meaning of the $gcos field varies but it usually contains the real name of the user (as opposed to the login name) and other information pertaining to the user. Beware, however, that in many system users are able to change this information and therefore it cannot be trusted and therefore the $gcos is tainted (see perlsec). The $passwd and $shell, user’s encrypted password and login shell, are also tainted, because of the same reason.

In scalar context, you get the name, unless the function was a lookup by name, in which case you get the other thing, whatever it is. (If the entry doesn’t exist you get the undefined value.) For example:

In getpw*() the fields $quota, $comment, and $expire are special cases in the sense that in many systems they are unsupported. If the $quota is unsupported, it is an empty scalar. If it is supported, it usually encodes the disk quota. If the $comment field is unsupported, it is an empty scalar. If it is supported it usually encodes some administrative comment about the user. In some systems the $quota field may be $change or $age, fields that have to do with password aging. In some systems the $comment field may be $ > Config module and the values d_pwquota , d_pwage , d_pwchange , d_pwcomment , and d_pwexpire . Shadow password files are only supported if your vendor has implemented them in the intuitive fashion that calling the regular C library routines gets the shadow versions if you’re running under privilege or if there exists the shadow(3) functions as found in System V (this includes Solaris and Linux.) Those systems that implement a proprietary shadow password facility are unlikely to be supported.

The $members value returned by getgr*() is a space separated list of the login names of the members of the group.

For the gethost*() functions, if the h_errno variable is supported in C, it will be returned to you via $? if the function call fails. The @addrs value returned by a successful call is a list of the raw addresses returned by the corresponding system library call. In the Internet domain, each address is four bytes long and you can unpack it by saying something like:

Илон Маск рекомендует:  Три кита ооп (объектно ориентированное программирование)

The Socket library makes this slightly easier:

In the opposite way, to resolve a hostname to the IP address you can write this:

Make sure is called in SCALAR context and that its return value is checked for definedness.

If you get tired of remembering which element of the return list contains which return value, by-name interfaces are prov > File::stat , Net::hostent , Net::netent , Net::protoent , Net::servent , Time::gmtime , Time::localtime , and User::grent . These override the normal built-ins, supplying versions that return objects with the appropriate names for each field. For example:

Even though it looks like they’re the same method calls (u > File::stat object is different from a User::pwent object.

Что такое код getservbyport

Gets Service Information by Port

Portability: UNIX compatible
SYNOPSIS
DESCRIPTION
RETURN VALUE
CAUTION
PORTABILITY
IMPLEMENTATION
RELATED FUNCTIONS

Given the port of a well-known service, identified by the port argument, and the protocol string for accessing it, pointed to by proto , getservbyport returns a pointer to the servent structure, which is defined in . This structure is typically used to obtain the name of the service from the s_name field. The source of the data in this structure is the services file, that is, a file with the same format as the /etc/services file on a UNIX operating system. Refer to for details on the servent structure.

Refer to Search Logic for information on the logic used to determine the location of the services file.

If getservbyport succeeds, it returns a pointer to the matching port number in the servent structure. A null pointer indicates an error occurred or there were no more network entries.

The value that getservbyport returns points to a static structure within the library. You must copy the information from this structure before you make further getservbname , getservbyport , or getservent calls.

getservbyport is portable to other environments, including most UNIX systems, that implement BSD sockets.

getservbyport is ported directly from the BSD UNIX Socket Library.

клиент — поиск всех сервисов с использованием функции servbyport ()

Мне нужно сделать простую клиентскую программу, когда я добавлю номер порта и клиент будет искать все службы для этого порта. Теперь проблема с ошибкой сегментации в операторе if. Как вернуть все услуги? Я думаю, в моей программе будет только один.

1 ответ

РЕДАКТИРОВАТЬ (в ответ на новую проблему — см. Комментарии ниже):

Вам, вероятно, нужно получить список протоколов и работать с ними в цикле. Содержимое цикла должно быть примерно таким:

  1. Вызов getprotoent
  2. Если результат равен NULL, выйдите из цикла.
  3. Иначе, выкопайте имя протокола из возвращенной структуры.
  4. Используйте это имя в качестве второго аргумента для getservbyport
  5. Делай что хочешь с результатом

РЕДАКТИРОВАТЬ (в ответ на новую проблему ):

Таким образом, ваша логика заключается в чтении sp ТОЛЬКО ЕСЛИ sp является NULL . Очевидно, что это будет segfault.

Так должно быть:

Но тогда вы укажете еще одну новую проблему :

Это может быть потому, что (согласно предыдущей версии моего ответа) вы сделали atoi для чего-то, что не было целым числом. Это может быть из-за любой другой причины. Мы не можем сказать, потому что мы не знаем, что вы даете.

Следующая часть ответа была в ответ на старую проблему, которую ОП задал в том же вопросе, и с тех пор решил отредактировать ее:

Прежде всего: поскольку вы используете getservbyport , вам действительно следует прочитать об услугах , если вы еще этого не сделали.

Теперь к ошибке:

Вы передаете argv[2] типа char * вместо int для port .

Я считаю, что пользователь вводит это в качестве аргумента в вашей программе?

Если вы знаете, что char * указывает на набор символов, которые выглядят как целое число, например, «1024», то вы можете преобразовать его в целое число с помощью atoi .

Илон Маск рекомендует:  Закраска, освещение и удаление невидимых поверхностей

Сделайте это вместо этого в строке с ошибкой при вызове getservbyport , getservbyport , что вы включили stdlib.h :

Если argv[2] НЕ может быть представлен как целое число, вы получите неопределенное поведение, поэтому, возможно, вы захотите сначала проверить это.

Использование С# для ссылки на номер порта для имени службы

В Linux используется MONO.

Как использовать С# для соединения номера порта с сервисом?

и вывести его на консоль, мне нужно это для простого портального сканера, который я построил.

Я знаю, что эта функция существует в ruby:

Версия для Mono Linux

У меня было немного времени на мои руки, поэтому я установил Mono в свой ящик Ubuntu Linux для тестирования. Реализация mono PInvoke getservbyport() и getservbyname() проще, чем в Windows (просто загрузите libc, в который встроена сетевая среда). Вот пример кода для справки, если кто-нибудь захочет этого;)

Версия Windows

Обновление: слишком поздно стало известно, что плакат добавил тег Linux и Mono после того, как задал вопрос, поэтому написал версию Windows. В Linux используйте версию Mono во втором сообщении.

Решение Mohammad более переносимо, чем альтернатива во многих отношениях. getservbyname() и getservbyport() зависят от платформы и требуют использования P/Invoke для использования с С# в Windows и, скорее всего, и для Mono.

клиент — поиск всех услуг с использованием servbyport функции ()

Мне нужно сделать простую клиентскую программу, когда я добавить номер порта и клиент будет Серчем всех услуг для этого порта. Теперь проблема с ошибкой сегментации, если заявление. Как вернуть все услуги? В моей программе он будет возвращать только один, я думаю.

EDIT (в ответ на новую новую проблему — см комментарии ниже):

Вы , вероятно , нужно , чтобы получить список протоколов и работать с теми , в цикле. Содержание цикла должно быть примерно:

  1. Вызов getprotoent
  2. Если результат равен NULL, то выход из цикла.
  3. В противном случае, откапывать имя протокола из возвращаемой структуры.
  4. Используйте это имя в качестве второго аргумента для getservbyport
  5. Делайте то, что вы хотите, чтобы в результате

EDIT (в ответ на новую проблему ):

Таким образом , ваша логика читать sp ТОЛЬКО ЕСЛИ sp это NULL . Очевидно , что это будет сегментации.

Но тогда вы укажете еще одну новой проблему :

Это может быть потому , что (как в предыдущей версии моего ответа), вы сделали atoi на то , что было не целое. Это может быть из — за какой — либо другой причине. Мы не можем сказать , потому что мы не знаем , что вход вы даете.

Это следующая часть ответа была в ответ на старую проблему , которая попросила ОП в этом вопросе, и с тех пор выбрала для редактирования над ним:

Прежде всего: Так как вы используете getservbyport , вы действительно должны читать о услугах , если вы еще не сделали.

Переходим к ошибке:

Вы передаете , argv[2] который имеет тип char * вместо int для port .

Я считаю, что пользователь вводит это в качестве аргумента в вашей программе?

Если вы знаете , что через char * указывает на набор символов , которые выглядят как целое, как «1024», то вы можете преобразовать его в целое число с atoi .

Сделайте это вместо того , на строке с ошибкой, при звонке getservbyport , а убедившись , что вы включили stdlib.h :

Если argv[2] НЕ представим как целое число, вы получите неопределенное поведение, так что, может быть, вы хотите , чтобы проверить это первое.

Что такое код getservbyport

The getservbyname and getservbyport functions use the WSALookupServiceBegin function to query SVCID_INET_SERVICEBYNAME as the service class GUID. The lpszServiceInstanceName member in the WSAQUERYSET structure passed to the WSALookupServiceBegin function references a string to indicate the service name or service port, and (optionally) the service protocol. The formatting of the string is illustrated as FTP or TCP or 21/TCP or just FTP. The string is not case sensitive. The slash mark, if present, separates the protocol identifier from the preceding part of the string. The Ws2_32.dll will specify LUP_RETURN_BLOB and the namespace provider will place a SERVENT structure in the blob (using offsets instead of pointers as described above). Namespace providers should honor these other LUP_RETURN_* flags as well.

Илон Маск рекомендует:  Программа для Авито - использовать или нет

Функция GetServByPort

struct servent FAR * getservbyport(
int port,
const char FAR *proto

ну, короче, помогите кто может. трабл такой: прога-клиент должна найти прогу-серверную часть автоматически. т.е. пользователь не должен вводит IP, имя компа. например, так делается в сетевых играх.

added later:
предполагаю, что прога будет искать по какому-то отведенному номеру порта.

Добрались до сути. Наконец-то. Потому что GetServByPort никакого отношения к решению указанной проблемы не имеет, ибо локальна.

Цитата (daNick @ 5.3.2007, 13:31 )
прога-клиент должна найти прогу-серверную часть автоматически
Цитата (daNick @ 5.3.2007, 21:03 )
в том-то и всеь вопрос: как искать?

Активный поиск:
Клиент посылает либо бродкастовый, либо мультикастовый запрос. Сервер, который его услышал, отвечает клиенту уникастом, сообщая необходимые для коннекта данные.

Пассивный поиск:
Бродкастовые либо мультикастовые оповещения рассылает сервер, а клиент их слушает.

Публикация:
Сервис сервера публикуется в перечне NetBIOS-сервисов сервера или домена, клиент находит сервер стандартными средствами браузинга сетевого окружения.

iOS Manual Pages

  • Table of Contents
  • Download Sample Code
ADC Home>Reference Library> Reference > Mac OS X > Mac OS X Man Pages

This document is a Mac OS X manual page. Manual pages are a command-line technology for providing documentation. You can view these manual pages locally using the man(1) command. These manual pages come from many different sources, and thus, have a variety of writing styles.

For more information about the manual page format, see the manual page for manpages(5).

Sending feedback…

We’re sorry, an error has occurred.

Please try submitting your feedback later.

Thank you for providing feedback!

Your input helps improve our developer documentation.

GETSERVENT

ОБЗОР


ОПИСАНИЕ

Функция getservbyname () возвращает структуру servent элемента из базыданных, который совпадает со службой name и использующей протокол proto . Если значение proto равно NULL, то подойдёт любой протокол. Принеобходимости будет открыто подключение к базе.

Функция getservbyport () возвращает структуру servent элемента из базыданных, который совпадает с портом port (значение имеет сетевой порядокбайт) и использующей протокол proto . Если значение proto равно NULL,то подойдёт любой протокол. При необходимости будет открыто подключение кбазе.

Функция setservent () открывает соединение к базе и устанавливаетследующую запись к первой записи. Если stayopen не равен нулю, топодключение к базе между вызовами нескольких функций getserv* () не будетзакрыто.

Функция endservent () закрывает подключение к базе.

Структура servent определена в таким образом:

Члены структуры servent : s_name Официальное название службы. s_aliases Список альтернативных имён службы, завершающийся NULL. s_port Номер порта службы, задаваемый в сетевом порядке байт. s_proto Имя протокола, используемого с данной службой.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


ФАЙЛЫ


АТРИБУТЫ


Описание терминов данного раздела смотрите в attributes (7).
Интерфейс Атрибут Значение
getservent () Безвредность в нитях MT-Unsafe race:servent
race:serventbuf locale
getservbyname () Безвредность в нитях MT-Unsafe race:servbyname
locale
getservbyport () Безвредность в нитях MT-Unsafe race:servbyport
locale
setservent (),
endservent ()
Безвредность в нитях MT-Unsafe race:servent
locale

В приведённой выше таблице servent в race:servent означает, что если внескольких нитях программы одновременно используются функции setservent (), getservent () или endservent (), то может возникнутьсостязательность по данным.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL