Вы ищете nmap.
# nmap -sP 10.1.150.1-10
Starting Nmap 5.00 ( http://nmap.org ) at 2012-01-04 00:02 CET
Host foo.example.com (10.1.150.2) is up (0.00066s latency).
Host bar.example.com (10.1.150.7) is up (0.00066s latency).
Nmap done: 10 IP addresses (1 host up) scanned in 1.41 seconds
Каждый процесс имеет свою собственную среду, скопированную с родителя. Если родитель является оболочкой, существует понятие экспортных переменных, которое нужно рассмотреть, но это не применяется, когда Вы имеете дело с exec()
и т.д. непосредственно. LOGNAME
переменная обычно устанавливается оболочкой входа в систему, Вы просто видите оставшееся значение, которое не было сброшено. Так, Вы видите дочернюю среду. В некоторых системах Вы не можете легко получить доступ к родителю (или другой процесс) среда, на Linux можно сделать это легко (подвергающийся полномочиям) через /proc
)
Можно, вероятно, воспроизвести эффект, который Вы видите путем попытки обоих su
и su -
, последний инициализирует среду входа в систему оболочки, которая (почти наверняка) сбросит LOGNAME
среди других вещей первый оставит это нетронутым.
Используя env
команда является одним способом получить чистую среду при запуске нового процесса с командной строки, необходимо проверить execle()
документация относительно Вашей системы, чтобы видеть, как сделать что-то подобное.
Можно просто проверить пользовательское использование ENV:
su -l user_name -c "run_programm && env"
Или можно проверить env
из дочернего процесса при помощи он - pid,
предположите, что Ваш pid дочернего процесса 24112
, затем просто проверьте env
использование:
cat /proc/24112/environ
execl("su", "-l", "user_name", "-c", "program");
в Вашем коде.
– Alexis Wilke
29.07.2015, 10:03
Некоторые биты информации:
execle
или execve
предоставлять переменные среды ребенку. Можно использовать это и для подавления переменных среды от родительского процесса, которые больше не подходят для ребенка, и предоставлять дополнительные переменные ребенку.bash -l
. Это заполнит среду что касается ребенка. Для многих оболочек (включая удар), предварительно ожидая дефис к названию двоичного файла, т.е. передача -bash
как argv[0]
, имеет тот же эффект. Основной эффект этого различия состоит в том, что оболочка входа в систему выполнится /etc/profile
и/или другие сценарии оболочки профиля, которые в свою очередь определяют большой номер переменных среды.pam_env
модуль будет заботиться о надлежащей инициализации среды. Можно взглянуть на это и его конфигурацию, или чтобы использовать его или подражать его поведению.Каждый процесс имеет ряд переменных среды (который может быть установлен в оболочке export SOMEVAR=value
и так). Они наследованы как есть дочерними процессами. Если Вы хотите сбросить их, использовать extern char **environ;
достигать переданную среду (см. environ(7)
), и затем используйте execle(3)
или execve(3)
передача новой среды выстраивает со скопированными значениями переменных. Некоторое руководство на том, что и то, как действительно делают это, дано David Wheeler в его "Безопасном ПРАКТИЧЕСКОМ РУКОВОДСТВЕ программирования Unix/Linux"