Solarisでは、特定のプロセス(sshdセッション)が使用しているIPアドレスを取得する必要があります。
彼らはどのようにLinux上でそれをしますか?
/proc/ProcessId/fd /にあるプロセスファイル記述子を反復する
反復ファイル記述子がソケットの場合、readlink、open、および最後にファイル記述子を読み込みます。ファイル記述子がsolaris 11.0のソケットであるかどうかを検出し、IPアドレスを抽出する
したがってsolarisでは、プロセスのソケットファイル記述子を検出できます。私はgetpeername(..)のような方法がありました
int fd=NULL;
struct dirent *dentp;
while ((dentp = readdir(dirp)) != NULL) { //iterate file descriptors
fd = atoi(dentp->d_name);
struct stat statb;
char temp_dir_path [100];
if (stat(temp_dir_path, &statb) != -1)
{
if (S_ISSOCK(statb.st_mode))
{
//What to do here ?? temp_dir_path is /proc/12345/fd/4
、のgetsockname(..)彼らは私が他のプロセスのファイル記述子を読みたい、現在のコンテキストのプロセスのファイルディスクリプタのparamとして受け取ります。
ファイルディスクリプタを開いてstruct sockaddr_inにキャストできますか?
ソケットファイルディスクリプタの構造は、LinuxおよびSolarisの間で異なっている..私は私は
私は明日仕事で確認してください...私は、ターゲットプロセスの子プロセスからファイルディスクリプタをopen()しようとしたとき、-1を返しました – ilansch
* easy *ソリューションは 'popen(" pfiles 1234 "、" r); "と出力を解析するだけです。これは、文書化されていないSolarisシステムの実装に依存しないという利点があります。 –
これはバッチスクリプトからでも行うことができますが、 pfilesはプロセスを検査している間中断しているので良いです。私はすぐに読み込みが必要なので、一時停止を避けたい。 – ilansch