LINUX.ORG.RU

busybox узнать pid или наименование службы открывший порт

 


1

2

Приветствую!
Подскажите как узнать pid процесса открывший порт или как узнать сервис открывший порт.
Описание сложности.
Есть видеокамера rvi. Подключаюсь к ней по телнет, внутри busybox на arm. Проверял камеру nmap один порт смущает 49152, хочу узнать что за процесс.

1. netstat с ключем -p нет
2. ss нет
3. lsof нет
4. fuser и awk нет
5. top не показывает открытый порт
6. ps aux нет, только ps w
https://serverfault.com/questions/219984/busybox-netstat-no-p здесь предлагают смотреть в /proc. запустил grep 49152 /proc/*
пока ничего не нашел (((
Накидайте еще вариантов.

Если есть /proc/net/{tcp,udp}

смотрим в /proc/net/{tcp,udp} поле inode для интересующего сокета

далее ищем в /proc/*/fd линк с содержимым «socket:[xxxxx]»

типа

find /proc/*/fd -type l | xargs ls -l 2>/dev/zero | grep 'socket:\[xxxxx\]'

vel ★★★★★
()
Ответ на: комментарий от vel

Если есть /proc/net/

Но ведь это ссылка на self/net, то есть только на pid текущего скрипта/ls.

vodz ★★★★★
()
Ответ на: комментарий от vel
cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
   0: 00000000:C000 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 1249 1 c04c3580 300 0 0 2 -1                              
   1: 00000000:2705 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 1329 1 c04c2d00 300 0 0 2 -1                              
   2: 00000000:2706 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 1330 1 c04c2480 300 0 0 2 -1                              
   3: 00000000:1388 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 1302 1 c04c3140 300 0 0 2 -1                              
   4: 00000000:022A 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 1346 1 c04c28c0 300 0 0 2 -1                              
   5: 00000000:A553 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 1236 1 c04c2040 300 0 0 2 -1                              
   6: 00000000:0ED8 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 677 1 c04c39c0 300 0 0 2 -1                               
   7: 2102000A:022A 0102000A:DCA3 01 00000000:00000000 00:00000000 00000000     0        0 1636 1 c22539e0 44 4 15 2 2             

поле inode есть, только вот я и пытаюсь узнать интересующий сокет

kozanostra
() автор топика
Ответ на: комментарий от kozanostra

Сдюжил.

Похвально. У меня для встроенного shell-а вышло как-то так:

#!/bin/dash

# Special for busybox netstat, the rezult is as `netstat -natup'
# if used mainstream netstat
#
#  Copyright (C) 2022 by Vladimir Oleynik <dzo@simtreas.ru>
# may safely be consumed by a BSD or GPL license.

hex2IPv4() {
	local a h h1 h2 h3 h4 p1 p2 port
	h=
	for a; do
		if [ -z "$h" ]; then
			port=${a#*:}
			h=${a%:$port}
			h4=${h#??????}
			h3=${h%$h4}
			h3=${h3#????}
			h2=${h%$h3$h4}
			h2=${h2#??}
			h1=${h%$h2$h3$h4}
			p2=${port#??}
			p1=${port%$p2}
		else
			eval $a=$((0x$h4)).$((0x$h3)).$((0x$h2)).$((0x$h1)):$((0x$p1$p2))
			h=
		fi
	done
}

cd /proc || exit 1
LIST=
CR='
'

read_proc_net() {
	local st tq rq tr uid tm_when other f="net/$1"

	[ -f "$f" ] || return 1

	while read sl local_address rem_address st tq rq tr uid tm_when inode other; do
		[ x"$local_address" = xlocal_address -o x"$local_address" = x00000000:0000 ] && continue
		LIST="${LIST}${LIST:+$CR}$1|$local_address-$rem_address=$inode"
	done << @
$(cat "$f")
@
	return 0
}

IP_two_tab() {
	local a _l
	for a ; do
		eval _l=\$$a
		[ "${#_l}" -lt 16 ] && eval $a='$_l\\t'
	done
}

read_proc_net tcp
read_proc_net udp

echo "Proto\tLocal_address\t\tRem_address\t\tPID"

for d in 1* 2* 3* 4* 5* 6* 7* 8* 9* ; do
	[ "${d#?}" = '*' -o ! -d "$d" ] && continue
	for fd in "$d/fd"/* ; do
		[ -r "$fd" ] || continue
		read ln arrow n << @
$(stat -c '%N' "$fd")
@
		eval n=$n               # dequote
		s=${n#'socket:['}
		[ "x$s" = "x$n" ] && continue
		s=${s%?}                # socket number
		for l in $LIST ; do
			inode=${l##*=}
			[ $inode -eq $s ] || continue
			proto=${l%%'|'*}
			l=${l#$proto?}
			local_address=${l%%-*}
			rem_address=${l#$local_address-}
			rem_address=${rem_address%=$inode}
			hex2IPv4 $local_address local_address $rem_address rem_address
			IP_two_tab local_address rem_address
			echo "$proto\t$local_address\t$rem_address\t$d"
		done
	done
done

vodz ★★★★★
()
Ответ на: комментарий от Minona

sonia_redir
если кильнуть, то отваливается вся связь с камерой (телнет, логин в веб морде, картинка в линейке)
где то через 30 секунд служба ребутиться и камера восстанавливается

kozanostra
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.