在 netstat 或 lsof 命令中看不到我正在运行的进程?

标签 c bash sockets network-programming

我正在尝试进行套接字编程。我制作了以下文件 inetaddr.c,我使用的是 Ubuntu 12.04。 以下代码不会在控制台上显示我当前正在运行的进程,而我执行它时应该是这样。我尝试了以下两个命令。

system("netstat -pa --tcp 2>/dev/null | sed -n '1,/^Proto/p;/inetaddr/p'");

甚至

system("lsof -i tcp | sed -n '1p;/inetaddr/p'");

我的编码有什么问题吗?如何通过netstat或lsof命令查看正在运行的进程?

inetaddr.c

/* inetaddr.c:
*
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
static void bail(const char *on_what) {
    fputs(on_what,stderr);
    fputc('\n',stderr);
    exit(1);
}
int main(int argc,char **argv) {
int z=0;
struct sockaddr_in adr_inet;/* AF_INET */
int len_inet; /* length */
int sck_inet; /* Socket */

 /* Create a Socket */
 sck_inet = socket(AF_INET,SOCK_STREAM,0);
printf("sck_inet = %d, PID = %u\n", sck_inet, getpid());
 if ( sck_inet < 0 )
    bail("socket()");

 /* Establish address */
 memset(&adr_inet,0,sizeof(adr_inet));

 adr_inet.sin_family = AF_INET;
 adr_inet.sin_port = htons(9000);

 adr_inet.sin_addr.s_addr = inet_addr("127.0.0.95");

    if ( adr_inet.sin_addr.s_addr == INADDR_NONE )
        bail("bad address.");
    len_inet = sizeof(adr_inet);
    printf("z value = %d before bind\n",z );
    z = bind(sck_inet, (struct sockaddr *)&adr_inet,len_inet);
    printf("z value = %d\n",z );
    if (z==-1)
        bail("bind()");
 /* Display our socket address */
    system("lsof -i tcp | sed -n '1p;/inetaddr/p'");
    //system("netstat -pa --tcp 2>/dev/null | sed -n '1,/^Proto/p;/bind/p'");
 return 0; 
}

生成文件

all:    
    gcc -c -D_GNU_SOURCE -Wall inetaddr.c
    gcc inetaddr.o -o inetaddr

最佳答案

尝试在 netstat 之前添加一个监听套接字。像这样:

/* Display our socket address */
listen(sck_inet,50);  /* <--- Add this */
system("lsof -i tcp | sed -n '1p;/inetaddr/p'");
//system("netstat -pa --tcp 2>/dev/null | sed -n '1,/^Proto/p;/bind/p'");
return 0;

关于在 netstat 或 lsof 命令中看不到我正在运行的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16045125/

相关文章:

bash - 如何限制日志文件中的最大行数

linux - 执行sed命令时出错

c - 当我只能定义一个可变长度数组时,为什么要使用 malloc()?

c - 十进制转十六进制 : issues with sprintf?

c - 如何在 C 中使用指针算术将值从一个数组复制到另一个数组

c - 在 C 中的力量?

bash - 如何验证十进制数?

c - Linux NFQUEUE 处理问题

linux - 如何使用 netlink 监控用户空间守护进程中的内核 arp 表?

java - 客户端已知的客户端-服务器应用程序的加密和身份验证