예제 #1
0
def net_connections(kind, _pid=-1):
    """Return socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    Only INET sockets are returned (UNIX are not).
    """
    cmap = _common.conn_tmap.copy()
    if _pid == -1:
        cmap.pop('unix', 0)
    if kind not in cmap:
        raise ValueError("invalid %r kind argument; choose between %s"
                         % (kind, ', '.join([repr(x) for x in cmap])))
    families, types = _common.conn_tmap[kind]
    rawlist = cext.net_connections(_pid, families, types)
    ret = []
    for item in rawlist:
        fd, fam, type_, laddr, raddr, status, pid = item
        if fam not in families:
            continue
        if type_ not in types:
            continue
        status = TCP_STATUSES[status]
        if _pid == -1:
            nt = _common.sconn(fd, fam, type_, laddr, raddr, status, pid)
        else:
            nt = _common.pconn(fd, fam, type_, laddr, raddr, status)
        ret.append(nt)
    return ret
예제 #2
0
 def retrieve(self, kind, pid=None):
     if kind not in self.tmap:
         raise ValueError("invalid %r kind argument; choose between %s"
                          % (kind, ', '.join([repr(x) for x in self.tmap])))
     if pid is not None:
         inodes = self.get_proc_inodes(pid)
         if not inodes:
             # no connections for this process
             return []
     else:
         inodes = self.get_all_inodes()
     ret = []
     for f, family, type_ in self.tmap[kind]:
         if family in (socket.AF_INET, socket.AF_INET6):
             ls = self.process_inet(
                 "/proc/net/%s" % f, family, type_, inodes, filter_pid=pid)
         else:
             ls = self.process_unix(
                 "/proc/net/%s" % f, family, inodes, filter_pid=pid)
         for fd, family, type_, laddr, raddr, status, bound_pid in ls:
             if pid:
                 conn = _common.pconn(fd, family, type_, laddr, raddr,
                                      status)
             else:
                 conn = _common.sconn(fd, family, type_, laddr, raddr,
                                      status, bound_pid)
             ret.append(conn)
     return ret
예제 #3
0
 def retrieve(self, kind, pid=None):
     if kind not in self.tmap:
         raise ValueError("invalid %r kind argument; choose between %s" %
                          (kind, ', '.join([repr(x) for x in self.tmap])))
     if pid is not None:
         inodes = self.get_proc_inodes(pid)
         if not inodes:
             # no connections for this process
             return []
     else:
         inodes = self.get_all_inodes()
     ret = []
     for f, family, type_ in self.tmap[kind]:
         if family in (socket.AF_INET, socket.AF_INET6):
             ls = self.process_inet("/proc/net/%s" % f,
                                    family,
                                    type_,
                                    inodes,
                                    filter_pid=pid)
         else:
             ls = self.process_unix("/proc/net/%s" % f,
                                    family,
                                    inodes,
                                    filter_pid=pid)
         for fd, family, type_, laddr, raddr, status, bound_pid in ls:
             if pid:
                 conn = _common.pconn(fd, family, type_, laddr, raddr,
                                      status)
             else:
                 conn = _common.sconn(fd, family, type_, laddr, raddr,
                                      status, bound_pid)
             ret.append(conn)
     return ret
예제 #4
0
def net_connections(kind, _pid=-1):
    """Return socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    Only INET sockets are returned (UNIX are not).
    """
    cmap = _common.conn_tmap.copy()
    if _pid == -1:
        cmap.pop('unix', 0)
    if kind not in cmap:
        raise ValueError("invalid %r kind argument; choose between %s" %
                         (kind, ', '.join([repr(x) for x in cmap])))
    families, types = _common.conn_tmap[kind]
    rawlist = cext.net_connections(_pid, families, types)
    ret = []
    for item in rawlist:
        fd, fam, type_, laddr, raddr, status, pid = item
        if fam not in families:
            continue
        if type_ not in types:
            continue
        status = TCP_STATUSES[status]
        if _pid == -1:
            nt = _common.sconn(fd, fam, type_, laddr, raddr, status, pid)
        else:
            nt = _common.pconn(fd, fam, type_, laddr, raddr, status)
        ret.append(nt)
    return ret
예제 #5
0
def net_connections(kind='inet'):
    # Note: on OSX this will fail with AccessDenied unless
    # the process is owned by root.
    ret = []
    for pid in pids():
        try:
            cons = Process(pid).connections(kind)
        except NoSuchProcess:
            continue
        else:
            if cons:
                for c in cons:
                    c = list(c) + [pid]
                    ret.append(_common.sconn(*c))
    return ret
예제 #6
0
파일: _psbsd.py 프로젝트: zhmz90/Dato-Core
def net_connections(kind):
    if kind not in _common.conn_tmap:
        raise ValueError("invalid %r kind argument; choose between %s"
                         % (kind, ', '.join([repr(x) for x in conn_tmap])))
    families, types = conn_tmap[kind]
    ret = []
    rawlist = cext.net_connections()
    for item in rawlist:
        fd, fam, type, laddr, raddr, status, pid = item
        # TODO: apply filter at C level
        if fam in families and type in types:
            status = TCP_STATUSES[status]
            nt = _common.sconn(fd, fam, type, laddr, raddr, status, pid)
            ret.append(nt)
    return ret
예제 #7
0
파일: _psosx.py 프로젝트: zhmz90/Dato-Core
def net_connections(kind='inet'):
    # Note: on OSX this will fail with AccessDenied unless
    # the process is owned by root.
    ret = []
    for pid in pids():
        try:
            cons = Process(pid).connections(kind)
        except NoSuchProcess:
            continue
        else:
            if cons:
                for c in cons:
                    c = list(c) + [pid]
                    ret.append(_common.sconn(*c))
    return ret
예제 #8
0
def net_connections(kind, _pid=-1):
    """Return socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    """
    if kind not in conn_tmap:
        raise ValueError("invalid %r kind argument; choose between %s" %
                         (kind, ', '.join([repr(x) for x in conn_tmap])))
    families, types = conn_tmap[kind]
    rawlist = cext.net_connections(_pid, families, types)
    ret = []
    for item in rawlist:
        fd, fam, type, laddr, raddr, status, pid = item
        status = TCP_STATUSES[status]
        if _pid == -1:
            nt = _common.sconn(fd, fam, type, laddr, raddr, status, pid)
        else:
            nt = _common.pconn(fd, fam, type, laddr, raddr, status)
        ret.append(nt)
    return ret
예제 #9
0
def net_connections(kind, _pid=-1):
    """Return socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    """
    if kind not in conn_tmap:
        raise ValueError("invalid %r kind argument; choose between %s"
                         % (kind, ', '.join([repr(x) for x in conn_tmap])))
    families, types = conn_tmap[kind]
    rawlist = cext.net_connections(_pid, families, types)
    ret = []
    for item in rawlist:
        fd, fam, type, laddr, raddr, status, pid = item
        status = TCP_STATUSES[status]
        if _pid == -1:
            nt = _common.sconn(fd, fam, type, laddr, raddr, status, pid)
        else:
            nt = _common.pconn(fd, fam, type, laddr, raddr, status)
        ret.append(nt)
    return ret