Таким образом, на основе ваших ответов на других людей ...
У вас есть программа бегущий на вашем компьютере, который открыл сокет к какой-либо другой программы B, который может быть запущен в любом месте. Но ни одна из этих программ не та, которую вы пытаетесь написать здесь. И поэтому вы хотите, чтобы ваша программа могла отправлять данные через сокетное соединение программы A с программой B.
Если это примерно то, что вы пытаетесь сделать, то нет, вы, вероятно, не сможете этого сделать. По крайней мере, не без инъекции dll, чтобы попасть в процесс программы A.
Кроме того, даже если бы вы могли найти способ отправки через сокет программы A, вам нужно было бы узнать точную информацию о протоколе связи, который программа A и B. Если вы этого не сделаете, вы рискуете отправить данные в программу B, чего она не ожидает, и в этом случае она может прекратить соединение, сбой или сделать любое количество плохих вещей в зависимости от того, как оно было написано ,
И если вы действительно пытаетесь отправить определенную часть данных не только через одну программу A, но и через каждую программу на компьютере с открытым соединением сокетов, вы, вероятно, столкнетесь с тем, что я только что описал. Даже если данные, которые вы хотите отправить, будут работать для одной конкретной программы, другие программы почти наверняка используют совершенно разные протоколы связи и, следовательно, скорее всего будут иметь проблемы с обработкой ваших данных.
Не зная, чего вы действительно пытаетесь достичь, я не могу сказать, будет ли ваша цель просто сложной и трудоемкой, или если это просто плохая идея, что вы никогда не должны быть пытаясь сделать. Но что бы это ни было, я предлагаю попытаться найти другой и лучший способ, чем пытаться отправить данные через сокет другой программы.
Есть ли способ, имеющий заданный идентификатор сокета (первый параметр send()) данного процесса, отправить его через мое приложение, не выполняя инъекцию dll? –
Итак, чтобы продолжить пример. Если вы хотите отправить «ABC» на каждый прослушивающий порт на вашем компьютере, возьмите этот код и вставьте его в свой цикл. Только увеличивайте PORT вместо того, чтобы пытаться вызвать send с неинициализированным сокетом. Также измените «foobar.com» на «localhost» или на имя любого компьютера, к которому вы хотите подключиться. Также измените выход на простой. Это будет проходить через порт от 0 до 10000, попытаться подключиться к нему, и при успешном соединении отправьте «ABC» (если вы замените argv [1] на «ABC»). Также не забудьте закрыть соединение: close (sd); –
Я не хочу отправлять его на каждый прослушивающий порт. Я хочу отправить его уже созданному соединению приложения X. –