Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1373591 > unrolled thread

How to get creatior PID information for the local tcp connection

Started byVishnu Pratap Singh <vishu13285@gmail.com>
First post2016-04-07 19:40 +0200
Last post2016-04-07 20:40 +0200
Articles 3 — 2 participants

Back to article view | Back to linux.kernel


Contents

  How to get creatior PID information for the local tcp connection Vishnu Pratap Singh <vishu13285@gmail.com> - 2016-04-07 19:40 +0200
    Re: How to get creatior PID information for the local tcp connection Eric Dumazet <eric.dumazet@gmail.com> - 2016-04-07 20:30 +0200
      Re: How to get creatior PID information for the local tcp connection Eric Dumazet <eric.dumazet@gmail.com> - 2016-04-07 20:40 +0200

#1373591 — How to get creatior PID information for the local tcp connection

FromVishnu Pratap Singh <vishu13285@gmail.com>
Date2016-04-07 19:40 +0200
SubjectHow to get creatior PID information for the local tcp connection
Message-ID<rlm4p-7rS-1@gated-at.bofh.it>
Hi,


Issue -  How to get PID information for the local tcp connection



i want to get the creator PID for each socket in user space for local
tcp connection, i see in kernel there is support for returing PID with
"SO_PEERCRED" ioctl to work across namespaces. it uses struct pid and
struct cred to store the peer credentials on struct sock.
cred_to_ucred(sk->sk_peer_pid, sk->sk_peer_cred, &peercred); Above
function stores the PID information in ucred->pid = pid_vnr(pid); and
same is returned via "SO_PEERCRED" ioctl .

But for local tcp connection i get pid as 0, is there any way i can
get the PID information. Any help or suggestion will be highly
helpful.



BR,

Vishnu<div id="DDB4FAA8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br />
<table style="border-top: 1px solid #aaabb6;">
	<tr>
        <td style="width: 55px; padding-top: 13px;"><a
href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail"
target="_blank"><img
src="https://ipmcdn.avast.com/images/2016/icons/icon-envelope-open-tick-round-orange-v1.png"
/></a></td>
		<td style="width: 470px; padding-top: 15px; color: #41424e;
font-size: 13px; font-family: Arial, Helvetica, sans-serif;
line-height: 18px;">Virus-free. <a
href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail"
target="_blank" style="color: #4453ea;">www.avast.com</a>
		</td>
	</tr>
</table><a href="#DDB4FAA8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1"
height="1"></a></div>

[toc] | [next] | [standalone]


#1373641

FromEric Dumazet <eric.dumazet@gmail.com>
Date2016-04-07 20:30 +0200
Message-ID<rlmQN-82W-3@gated-at.bofh.it>
In reply to#1373591
On Thu, 2016-04-07 at 23:01 +0530, Vishnu Pratap Singh wrote:
> Hi,
> 
> 
> Issue -  How to get PID information for the local tcp connection
> 
> 
> 
> i want to get the creator PID for each socket in user space for local
> tcp connection, i see in kernel there is support for returing PID with
> "SO_PEERCRED" ioctl to work across namespaces. it uses struct pid and
> struct cred to store the peer credentials on struct sock.
> cred_to_ucred(sk->sk_peer_pid, sk->sk_peer_cred, &peercred); Above
> function stores the PID information in ucred->pid = pid_vnr(pid); and
> same is returned via "SO_PEERCRED" ioctl .
> 
> But for local tcp connection i get pid as 0, is there any way i can
> get the PID information. Any help or suggestion will be highly
> helpful.
> 
> 

man 7 socket

       SO_PEERCRED
              Return the credentials of the foreign  process  connected  to  this  socket.
              This  is  possible  only  for  connected  AF_UNIX stream sockets and AF_UNIX
              stream and datagram socket pairs created using socketpair(2);  see  unix(7).
              The  returned  credentials  are those that were in effect at the time of the
              call to connect(2) or socketpair(2).  The argument  is  a  ucred  structure;
              define  the  GNU_SOURCE  feature test macro to obtain the definition of that
              structure from <sys/socket.h>.  This socket option is read-only.

[toc] | [prev] | [next] | [standalone]


#1373647

FromEric Dumazet <eric.dumazet@gmail.com>
Date2016-04-07 20:40 +0200
Message-ID<rln0u-87S-21@gated-at.bofh.it>
In reply to#1373641
On Thu, 2016-04-07 at 11:26 -0700, Eric Dumazet wrote:
> On Thu, 2016-04-07 at 23:01 +0530, Vishnu Pratap Singh wrote:
> > Hi,
> > 
> > 
> > Issue -  How to get PID information for the local tcp connection
> > 
> > 
> > 
> > i want to get the creator PID for each socket in user space for local
> > tcp connection, i see in kernel there is support for returing PID with
> > "SO_PEERCRED" ioctl to work across namespaces. it uses struct pid and
> > struct cred to store the peer credentials on struct sock.
> > cred_to_ucred(sk->sk_peer_pid, sk->sk_peer_cred, &peercred); Above
> > function stores the PID information in ucred->pid = pid_vnr(pid); and
> > same is returned via "SO_PEERCRED" ioctl .
> > 
> > But for local tcp connection i get pid as 0, is there any way i can
> > get the PID information. Any help or suggestion will be highly
> > helpful.
> > 
> > 
> 
> man 7 socket
> 
>        SO_PEERCRED
>               Return the credentials of the foreign  process  connected  to  this  socket.
>               This  is  possible  only  for  connected  AF_UNIX stream sockets and AF_UNIX
>               stream and datagram socket pairs created using socketpair(2);  see  unix(7).
>               The  returned  credentials  are those that were in effect at the time of the
>               call to connect(2) or socketpair(2).  The argument  is  a  ucred  structure;
>               define  the  GNU_SOURCE  feature test macro to obtain the definition of that
>               structure from <sys/socket.h>.  This socket option is read-only.
> 

Sorry, I hit "Send" too fast.

This is not implemented for TCP yet.

You'll have to take a look at iproute2 package, since "ss -tp" is able
to find this information, by looking at all /proc/{pid}/fd/*  files and
the socket inode number the kernel gives through inet_diag

Not scalable if you have millions of sockets...

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web