2013-05-09 6 views
3

У меня есть следующий случай:Есть ли способ найти pid процесса сокета?

  • Два приложение (шахтная и третья сторона) КСНО должны обмениваться данными по протоколу TCP/IP
  • я могу изменить код моего приложения, но не приложение третьей стороны
  • Невозможно изменить протокол (потому что я не могу изменить стороннее приложение).

В моем приложении я хочу убедиться, что я говорю с правильным приложением.

Я знаю, как я могу получить пэр порт с geetpeername

Что я ищу способ, чтобы выяснить, ИДП процесса, который использует этот порт.

Я нашел похожие вопросы: How do you determine the PID of a peer TCP connection on the same iOS device? Однако в его случае оба порта находятся в одном приложении.

Отказ от ответственности: Я в порядке с частным API. Он не будет отправлен в AppStore. Тем не менее, я ищу решение для не взломанного телефона.

Update 1

Я сказал, что мне нужно PID, потому что, как известно, способы получения связи между PID и приложения расслоении идентификатору (с помощью SYSCTL).

Вообще говоря, я не забочусь о ПИД как таковой. Моя забота - выяснить, что такое приложение на другой стороне сокета.

+1

Кажется маловероятным. Как поможет ПИД? Возможно, если вы предоставите более подробную информацию, мы сможем предложить альтернативное решение. Похоже, что у другой службы был бы какой-то отпечаток, если бы он не ответил на связь с известным ответом. –

+0

@MarcusAdams Я предполагаю, что pid поможет, только если вы можете сопоставить имя процесса с pid, которое я не уверен, что вы можете сделать в iOS из-за песочницы. Однако, я согласен, это очень хаки. – trojanfoe

+0

@MarcusAdams: Я написал обновление. –

ответ

2

не есть решение для этого, но если я буду пытаться это сделать, я бы поступить следующим образом:

В системе UNIX, вы можете использовать команду lsof для определения какие процессы открывают файлы. Сюда входят сокеты, а lsof позволяет определить pid процесса, используя данный порт. Например, используйте

lsof -n -P -i :443 

, если вы пытаетесь определить, какой процесс использует порт 443 (HTTPS), который может дать (на OS X):

COMMAND PID USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
firefox 81615 myname 112u IPv4 0xffffff8017379a40  0t0 TCP 192.168.2.7:52521->74.125.28.103:443 (CLOSE_WAIT) 

версия с открытым исходным кодом lsof для Дарвина, я считаю, can be found here. Поэтому вы можете попробовать начать с main.c и использовать эти аргументы командной строки, перейдите по коду, пока не найдете используемые системные вызовы.

Это, безусловно, возможно the calls needed will not work when run in a process with user mobile privileges. Но, может быть, нет? Если в источнике lsof есть проверка безопасности, вы можете, конечно, удалить это, если вы сами скопируете и вставьте источник.

В любом случае, возможно, стоит попробовать, если никто не предлагает другого ответа.

Примечание:lsof доступен для телефонов с джейлбрейком, и я просто попробовал использовать текущие версии Cydia. Они не работали для меня в 5.1.1 или 6.1.2. Не знаю, почему.Я предполагаю, что если они были в репозитории, хотя, в какой-то момент, кому-то удалось отправить lsof в iOS.

+0

Большое спасибо. Я нашел подобную информацию (мне нужен lsof или netstat). Тем не менее, проблема в том, что он требует «sudo» для работы с собственностью на OS X (поэтому мое предположение, что оно не будет работать на iOS). Однако я согласен. Мне нужно попробовать. –

+0

Да, как я уже сказал, Я не уверен, где ** проверка безопасности. Если он находится внутри кода 'lsof', вы можете удалить его самостоятельно. Если какой-то системный вызов, используемый' lsof', требует привилегий root, вам может быть не повезло Тем не менее, быстрый тест, который я запускаю на рабочем столе, говорит о том, что, возможно, запуск 'lsof' как' mobile' просто ограничит вас поиском, какие процессы ** запускаются мобильным **, слушают данный порт. «пытаюсь обнаружить другое стороннее приложение, тогда его также следует запустить« mobile ». Может быть, он будет работать для ваших целей? – Nate

Смежные вопросы