我在C中编写了一个小程序,用于从登录SSH会话的远程用户获取IP
代码:
int main (){
char * getIP ;
getIP = getenv ("SSH_CLIENT");
printf ("%s", getIP);
printf("\n");
return 0;
}
效果很好,输出我
shell# ./a.out
192.168.1.33 39840 22
但我想只打印IP地址而不打印其余字符串。我无法弄清楚如何剪切字符串只打印第一部分(255.255.255.255)
我搜索一整天的解决方案,但没有成功:/
感谢您的帮助:)
更新!
我发现SSH_CLIENT可以使用REMOTEHOST:) 但Larsks解决方案非常有用,值得记住
答案 0 :(得分:2)
你甚至不需要strtok()
来做这件事,因为你所关心的只是空格之前的第一个字符串。使用strchr()
找到第一个空格,将其设置为NUL
,然后就完成了:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main (){
char *getIP, *mark;
int i;
getIP = getenv ("SSH_CLIENT");
// get the location of the first space character
mark = strchr(getIP, ' ');
// set it to 0 (ascii NUL)
*mark = 0;
printf ("%s\n", getIP);
return 0;
}
你可以通过这样做实际崩溃:
*(strchr(getIP, ' ')) = 0;
而不是:
mark = strchr(getIP, ' ');
*mark = 0;
但这并不是那么清楚,并且进行适当的错误检查会更难。
答案 1 :(得分:0)
您可以使用getenv()
拆分strtok()
返回的字符串,将字符串拆分为空格。您获得的第一个令牌是IP地址。
答案 2 :(得分:0)
你应该从不更改getenv-result
int main() {
char firstword[BUFSIZ], *getIP = getenv("SSH_CLIENT");
if( getIP )
{
sscanf( getIP , "%*s", BUFSIZ-1, firstword );
puts(firstword);
}
return 0;
}