我们可以从套接字地址中获取应用程序名称吗?
Posted
技术标签:
【中文标题】我们可以从套接字地址中获取应用程序名称吗?【英文标题】:Can we get the application name from the socket address? 【发布时间】:2017-07-05 10:11:13 【问题描述】:我们能否找到在给定套接字地址上运行的应用程序的名称?
套接字地址是指IP地址和端口号的组合。
就像我们可以通过在linux中使用以下命令从IP地址中找出主机的名称:
主机 [IP]
但是是否有任何命令或任何方法可以像查找主机名一样查找应用程序名称?
如果我们只能找到 web-application 名称或 tomcat 服务名称,那也可以。
【问题讨论】:
如果您正在谈论尝试从远程计算机执行此操作,那么您不能这样做。如果您知道它是一个 Web 服务器,那么您可以向它发出 Web 请求,看看是否有任何标识信息返回到标头中,但除此之外,您无法在不设置应用程序的情况下远程查询进程信息在目标计算机上,该计算机将在本地查询该信息,然后将其发回给您。 @jfriend00 是的,我正在尝试从远程计算机执行此操作,但我在所有提供套接字地址以查找应用程序名称的服务器上都以 root 用户身份进行 sudo 访问。 【参考方案1】:一个相当简单的方法是使用“netstat”:
gruescher@SMARTBUILD:~$ sudo netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 712/rpcbind
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1217/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 928/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1487/cupsd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 25654/postgres
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 19660/smbd
tcp 0 0 0.0.0.0:513 0.0.0.0:* LISTEN 980/xinetd
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 980/xinetd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 19660/smbd
tcp 0 0 0.0.0.0:41516 0.0.0.0:* LISTEN 31353/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 712/rpcbind
tcp6 0 0 :::80 :::* LISTEN 2757/apache2
tcp6 0 0 :::24693 :::* LISTEN 13707/fo_scheduler
tcp6 0 0 :::22 :::* LISTEN 928/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1487/cupsd
tcp6 0 0 :::445 :::* LISTEN 19660/smbd
tcp6 0 0 :::48611 :::* LISTEN 31353/rpc.statd
tcp6 0 0 :::139 :::* LISTEN 19660/smbd
如您所见,它显示端口、本地地址、PID 和进程名称。
您必须以超级用户身份运行它。
【讨论】:
以上是关于我们可以从套接字地址中获取应用程序名称吗?的主要内容,如果未能解决你的问题,请参考以下文章
在MFC中Socket服务器通过accept的socket套接字能获取到客户端的Mac地址吗?