分析网络端口被谁占用
来自个人维基
原因是CTS测试FAIL:
-- testNoListeningLoopbackTcpPorts fail junit.framework.AssertionFailedError: Found port listening on addr=127.0.0.1, port=5678, UID=0 in /proc/net/tcp
那现在就要看 5678是被谁占用的:
F:\tmp\a\0423> adb shell cat /proc/net/tcp sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 0100007F:13AD 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 5500 1 00000000 100 0 0 10 -1 1: 0100007F:162E 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 9210 1 00000000 100 0 0 10 -1
上面的端口是16进制,5678的十六进制是 162E,即第二个,其inode为 9210
开始找这个inode对应的进程:
F:\tmp\a\0423> adb shell ls -l /proc/*/fd/ | grep 9210 lrwx------ root system 2014-01-04 10:59 10 -> socket:[9210]
找到了,可是还是没显示出来对应的进程
但从上面可以确定这个文件的fd为10,因此可以用穷举来找到这个进程:
for /l %%i in (1, 1, 2000) do ( @echo %%i adb shell ls -l /proc/%%i/fd/10 )
另存为loop.bat,跑起,后面就可找到对应的进程号,为302:
F:\tmp\android\0423>( adb shell ls -l /proc/302/fd/10 ) 302 lrwx------ root system 2014-01-04 10:59 10 -> socket:[9210]