socket()
возвращает дескриптор файла, если это то, что вы называете идентификатором сокета, то способы получить это без взаимодействия процесса с окнами ограничены.FWIW в linux open FD перечисляются в файловой системе proc.
При этом единственное, что вы сможете сделать с помощью fd, это отправить дополнительную информацию из сокета.Вы также можете читать с fd, но любые данные, прочитанные таким образом, будут , а не отправляться в приложение, которому принадлежит сокет.Без некоторой координации это, вероятно, не будет тем, чего вы хотите, поскольку вы просто получите биты и кусочки данных.
Если вы просто хотите прослушивать трафик в вашей программе, то что-то вроде фильтрации пакетовдолжно быть достаточно, поэтому я предполагаю, что вы действительно хотите быть в состоянии походить на человека посередине для этого.
Если это так, то лучше всего на самом деле настроить приложение какпрокси для вашей другой службы.
Под этим я подразумеваю создание программы, которая открывает прослушивающий порт и принимает соединения при инициации соединения, она должна немедленно открыть собственное соединение с предварительно настроенным IP: портомсовмещаем и начинаем пересылку трафика.Как только это написано, достаточно просто проверить трафик перед пересылкой и, возможно, изменить его.
Если ваша программа является сервером, запустите ее на нестандартном порту, настройте это приложение для открытия обычного порта сервераи затем перенаправьте соединения на нестандартный порт, который вы настроили на localhost.
Если ваша программа является клиентом, просто направьте приложение-перехватчик на сервер и выберите случайный порт прослушивания на вашем устройстве.Затем настройте клиент для подключения к этому порту прослушивания, как если бы это был сервер.
Это должно работать практически во всем.Единственное предостережение: если трафик зашифрован, вы (очевидно) не сможете его проверить / изменить.Это практически то же самое, что и размещение вашего приложения за NAT.