Windows'taki bir bağlantı noktasını hangi işlemin dinlediğini nasıl öğrenebilirsiniz?
Windows'taki bir bağlantı noktasını hangi işlemin dinlediğini nasıl öğrenebilirsiniz?
Yanıtlar:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(Ana makine adlarını çözmeye çalışmasını durdurmak için -n ekleyin , bu da çok daha hızlı hale getirir.)
Not Dane'nin TCPView için önerisi . Çok faydalı görünüyor!
-a Tüm bağlantıları ve dinleme bağlantı noktalarını görüntüler.
-b Her bağlantıyı veya dinleme bağlantı noktasını oluşturmaya dahil olan yürütülebilir dosyayı görüntüler. Bazı durumlarda, iyi bilinen yürütülebilir dosyalar birden fazla bağımsız bileşeni barındırır ve bu durumlarda bağlantı veya dinleme bağlantı noktasının oluşturulmasında yer alan bileşenlerin sırası görüntülenir. Bu durumda çalıştırılabilir ad en altta [], üstte çağırdığı bileşendir ve TCP / IP'ye ulaşılana kadar devam eder. Bu seçeneğin zaman alıcı olabileceğini ve yeterli izniniz yoksa başarısız olacağını unutmayın.
-n Adresleri ve bağlantı noktası numaralarını sayısal biçimde görüntüler.
-o Her bağlantıyla ilişkilendirilmiş sahip olma işlem kimliğini görüntüler.
1234
- o zaman tasklist /fi "pid eq 1234"
sürecin adını ve diğer ayrıntılarını bulmak için kullanabilirsiniz .
Windows için yerel bir GUI var:
Veya Çalıştır'ı resmon.exe
veya Görev Yöneticisi'nin performans sekmesinden.
Bunun için bir GUI istiyorsanız TCPView kullanın . Microsoft'un satın aldığı eski Sysinternals uygulaması.
Pencereler için:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
Alman için.
FIND: Parameter format not correct
Çoğu yanıtta belirtilen -b anahtarı, makinede yönetici ayrıcalıklarına sahip olmanızı gerektirir. İşlem adını almak için gerçekten yükseltilmiş haklara ihtiyacınız yoktur!
Bağlantı noktası numarasında çalışan işlemin pid'ini bulun (ör. 8080)
netstat -ano | findStr "8080"
İşlem adını pid ile bulma
tasklist /fi "pid eq 2216"
Aşağıdaki komutu çalıştırırsanız daha fazla bilgi alabilirsiniz:
netstat -aon | find /i "listening" |find "port"
'Bul' komutunu kullanarak sonuçları filtrelemenize izin verir. find /i "listening"
yalnızca 'Dinleme' olan bağlantı noktalarını görüntüler. Not, büyük / /i
küçük harfleri yoksaymanız gerekir , aksi takdirde find "LISTENING" yazabilirsiniz. | find "port"
sonuçları yalnızca belirli bağlantı noktası numarasını içerenlerle sınırlar. Bunun üzerine, yanıt dizesinde herhangi bir yerde bağlantı noktası numarası bulunan sonuçlara da filtre uygulayacağını unutmayın.
FIND: Parameter format not correct
. Bulma ölçütlerinden sonra bir boşluk eklemeniz gerekir. Bu seni bırakacak netstat -aon | find /i "listening" | find "1234 "
.
{back tick}
" listen {back tick}
"" | find " {back tick}
" port {back tick}
" "(<- kaçan tırnak işaretleri not - back tick
bir snipping düşündüğü gibi gerçek karakteri ekleyemiyorum olarak terim bahane )
Bir komut istemi penceresi açın (Yönetici olarak) "Başlat \ Arama kutusundan" cmd girin "ve ardından" cmd.exe "ye sağ tıklayın ve" Yönetici Olarak Çalıştır "ı seçin
Aşağıdaki metni girin ve Enter tuşuna basın.
netstat -abno
-a Tüm bağlantıları ve dinleme bağlantı noktalarını görüntüler.
-b Her bağlantıyı veya dinleme bağlantı noktasını oluşturmaya dahil olan yürütülebilir dosyayı görüntüler. Bazı durumlarda, iyi bilinen yürütülebilir dosyalar birden fazla bağımsız bileşeni barındırır ve bu durumlarda bağlantı veya dinleme bağlantı noktasının oluşturulmasında yer alan bileşenlerin sırası görüntülenir. Bu durumda çalıştırılabilir ad en altta [], üstte çağırdığı bileşendir ve TCP / IP'ye ulaşılana kadar devam eder. Bu seçeneğin zaman alıcı olabileceğini ve yeterli izniniz yoksa başarısız olacağını unutmayın.
-n Adresleri ve bağlantı noktası numaralarını sayısal biçimde görüntüler.
-o Her bağlantıyla ilişkilendirilmiş sahip olma işlem kimliğini görüntüler.
Dinlediğiniz Bağlantı Noktasını "Yerel Adres" altında bulun
Bunun altındaki işlem adına doğrudan bakın.
NOT: İşlemi Görev Yöneticisi altında bulmak için
Bakmakta olduğunuz portun yanındaki PID'ye (işlem tanımlayıcı) dikkat edin.
Windows Görev Yöneticisi'ni açın.
İşlemler sekmesini seçin.
1. adımda netstat'ı yaptığınızda not ettiğiniz PID'yi arayın.
Bir PID sütunu görmüyorsanız, Sütunları Görüntüle / Seç'e tıklayın. PID'yi seçin.
“Tüm kullanıcılardan işlemleri göster” öğesinin seçili olduğundan emin olun.
Yalnızca bir komut kullanın:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
nerede 9000
Bağlantı noktası sayısına göre değiştirilmelidir.
Çıktı böyle bir şey içerecektir:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Açıklama:
aşağıdaki komutun çıktısından her satırda yinelenir:
netstat -aon | findstr 9000
her satırdan PID ( %a
- ad burada önemli değildir) çıkarılır (PID o satırdaki 5
th öğesidir) ve aşağıdaki komuta iletilir
tasklist /FI "PID eq 5312"
Eğer isterseniz atlamak başlık ve dönüşü komut isteminde , şunları kullanabilirsiniz:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Çıktı:
java.exe 5312 Services 0 130,768 K
findstr :9000
, numarayı içeren uygulamaları bile bulabilirsiniz (örneğin "80" aradığınızda 80, 800, 8000 numaralı bağlantı noktasında da uygulamalar bulabilirsiniz).
İlk olarak, bağlantı noktasını serbest bırakmak için ortadan kaldırmamız gereken belirli bir görevin işlem kimliğini buluruz:
tip
netstat -n -a -o
Windows komut satırı isteminde (cmd) bu komutu yürüttükten sonra, son sütunu düşündüğüm pid'i seçin. Bunun 3312 olduğunu varsayalım.
Şimdi yazın
taskkill /F /PID 3312
Şimdi netstat
komutu yazarak çapraz kontrol yapabilirsiniz .
NOT: bazen Windows bu komutu doğrudan CMD'de çalıştırmanıza izin vermez, bu nedenle önce şu adımlarla devam etmeniz gerekir:
Başlat menüsünden -> komut isteminden (komut istemine sağ tıklayın ve yönetici olarak çalıştırın)
Her bağlantıyla ilişkili tüm sahip olma işlem kimliklerinin bir listesini almak için:
netstat -ao |find /i "listening"
Herhangi bir işlemi öldürmek istiyorsanız kimliğe sahip olun ve bu komutu kullanın, böylece bağlantı noktası serbest kalır
Taskkill /F /IM PID of a process
Windows'da bir PID'den bağlantı noktası numarasını almak çok basittir.
Adımlar şunlardır:
Koşmaya gidin → cmd yazın → tuşuna basın Enter.
Aşağıdaki komutu yazın ...
netstat -aon | findstr [port number]
(Not: Köşeli parantez eklemeyin.)
Basın Enter...
Daha sonra cmd, PID ile birlikte bu bağlantı noktasında çalışan hizmetin ayrıntılarını verecektir.
Görev Yöneticisi'ni açın ve servis sekmesine basın ve PID'yi cmd'ninkiyle eşleştirin, hepsi bu.
Sadece bir komut kabuğu açın ve yazın (portunuzun 123456 olduğunu söyleyerek):
netstat -a -n -o | find "123456"
İhtiyacınız olan her şeyi göreceksiniz.
Başlıklar:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
Bu burada belirtildiği gibidir .
findstr 123456
(tırnak işaretleri olmadan) ya da find "123456"
(tırnak işaretleri ile). (@Josh)
Hangi bağlantı noktasını (PID) hangi bağlantı noktasını kullandığını bulmak için:
netstat -anon | findstr 1234
Burada 1234, işleminizin PID'sidir. [Uygulamanızın PID'sini bulmak için Görev Yöneticisi → Hizmetler / İşlemler sekmesine gidin.]
-n
Bayrağın iki kez ayarlanması gerekmediğine dikkat edilmelidir . -ano
yeterlidir.
Windows 10 veya Windows Server 2016'da PowerShell 5 ile çalıştırın Get-NetTCPConnection
cmdlet'i çalıştırın. Eski Windows sürümlerinde de çalışması gerektiğini düşünüyorum.
Varsayılan çıktısı Get-NetTCPConnection
herhangi bir nedenle İşlem Kimliği içermez ve biraz kafa karıştırıcıdır. Ancak, çıktıyı biçimlendirerek her zaman elde edebilirsiniz. Aradığınız mülk OwningProcess
.
443 numaralı bağlantı noktasını dinleyen işlemin kimliğini bulmak istiyorsanız, şu komutu çalıştırın:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
LocalAddress : ::
LocalPort : 443
RemoteAddress : ::
RemotePort : 0
State : Listen
AppliedSetting :
OwningProcess : 4572
CreationTime : 02.11.2016 21:55:43
OffloadState : InHost
Çıkışı, aradığınız özelliklere sahip bir tabloya biçimlendirin:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
LocalAddress LocalPort State OwningProcess
------------ --------- ----- -------------
:: 443 Listen 4572
0.0.0.0 443 Listen 4572
İşlemin bir adını bulmak istiyorsanız, şu komutu çalıştırın:
PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
143 15 3448 11024 4572 0 VisualSVNServer
Bunu yapmak için bir GUI aracı kullanmak isterseniz Sysinternals'ın TCPView'u vardır .
Komutu yazın: netstat -aon | findstr :DESIRED_PORT_NUMBER
Örneğin, 80 numaralı bağlantı noktasını bulmak istiyorsanız: netstat -aon | findstr :80
Bu cevap ilk olarak bu soruya gönderildi .
netstat:
-o sahip olma süreci
netstat -bano | findstr "7002"
netstat -ano > ano.txt
CurrPorts aracı arama ve filtre yardımcı olur
Komut istemini açın - başlat → Çalıştır → cmd
veya başlat menüsü → Tüm Programlar → Aksesuarlar → Komut İstemi .
tip
netstat -aon | findstr '[port_number]'
[port_number]
Kontrol etmek ve vurmak istediğiniz gerçek port numarası ile değiştirin Enter.
tip
tasklist | findstr '[PID]'
[PID]
Yukarıdaki adımdaki numarayla değiştirin ve tuşuna basın Enter.
netstat -ao
ve netstat -ab
uygulamayı size söyleyin, ancak sistem yöneticisi değilseniz "İstenen işlem yükseklik gerektirir" iletisini alırsınız.
İdeal değil, ancak Sysinternals'ın İşlem Gezgini'ni kullanırsanız, belirli işlemlerin özelliklerine gidebilir ve ilgilendikleri bağlantı noktasını kullanıp kullanmadıklarını görmek için TCP sekmesine bakabilirsiniz. Biraz iğne ve samanlık ama belki birine yardım eder ...
NirSoft'tan CurrPorts'u tavsiye ederim .
CurrPorts görüntülenen sonuçları filtreleyebilir. TCPView bu özelliğe sahip değildir.
Not: Bir işlemin soket bağlantısını sağ tıklatıp "Seçili TCP Bağlantılarını Kapat" ı seçebilirsiniz (Bunu TCPView'da da yapabilirsiniz). Bu, VPN'leri değiştirdikten sonra genellikle Outlook ve Lync ile ilgili bağlantı sorunlarını giderir. CurrPorts ile, komut satırından "/ close" parametresiyle bağlantıları da kapatabilirsiniz.
Bana yardımcı olan tek satırlık bir çözüm bu. 3000'i portunuzla değiştirin:
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
Düzenleme: Değiştirildi kill
için Stop-Process
daha PowerShell benzeri dil için
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
Bu araçları takip edin: Gönderen cmd : C:\> netstat -anob
ile yönetici ayrıcalıkları.
Tüm sysinternals.com.
Her işlem altında işlemin çalıştığını ve iş parçacıklarını öğrenmek istiyorsanız, öğrenmenizi öneririz wmic
. Bildiğinizden çok daha fazlasını veren harika bir komut satırı aracıdır.
Misal:
c:\> wmic process list brief /every:5
Yukarıdaki komut, her 5 saniyede bir kısaca tüm işlem listesini gösterecektir. Daha fazla bilgi için, sadece /?
pencerelerin komutuyla devam edebilirsiniz , örneğin,
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
Ve bu böyle devam eder. :)
kullanın:
netstat -a -o
Bu, belirli bir bağlantı noktasında çalışan işlemin PID'sini gösterir.
İşlem kimliğini unutmayın ve Görev Yöneticisi ve hizmetler veya ayrıntılar sekmesine gidin ve aynı PID'ye sahip işlemi sonlandırın.
Böylece, Windows'daki belirli bir bağlantı noktasında çalışan bir işlemi öldürebilirsiniz.
PowerShell kullanan kişiler için şunları deneyin Get-NetworkStatistics
:
> Get-NetworkStatistics | where Localport -eq 8000
ComputerName : DESKTOP-JL59SC6
Protocol : TCP
LocalAddress : 0.0.0.0
LocalPort : 8000
RemoteAddress : 0.0.0.0
RemotePort : 0
State : LISTENING
ProcessName : node
PID : 11552
Programlı olarak, iphlpapi.h dosyasından , örneğin GetTcpTable2 () gibi şeylere ihtiyacınız vardır . MIB_TCP6ROW2 gibi yapılar , sahip PID'sini içerir.
PowerShell kullanarak ... ... bu sizin arkadaşınız olacaktır (8080'i bağlantı noktası numaranızla değiştirin):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
Örnek çıktı
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
Yani bu örnekte tnslsnr.exe (OracleXE veritabanı) 8080 numaralı bağlantı noktasını dinliyor.
Hızlı açıklama
Select-String
netstat
ilgili hatların uzun çıkışını filtrelemek için kullanılır .-Pattern
her satırı düzenli ifadeye karşı test eder.-Context 0,1
her bir kalıp eşleşmesi için 0 satır aralığı ve 1 satır sonu çıktısını alır.Windows için, dinleme veya 1234 bağlantı noktasına bağlı bir şeyler bulmak istiyorsanız, cmd isteminde aşağıdakileri yürütün:
netstat -na | find "1234"
İşlem adını bağımsız değişken olarak alan ve netstat
işlem için çıktı veren aşağıdaki toplu komut dosyasını kullanın .
@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End
:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------
netstat -ano |findstr %z%
goto :eof
:End
Bilgi ve öldürme ile cevaplara dayanarak, benim için bunları tek bir komutta birleştirmek yararlıdır . Ve verilen bağlantı noktasını dinleyen işlem hakkında bilgi almak için cmd'den çalıştırabilirsiniz (örnek 8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
Veya öldürmek istiyorsanız:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
Ayrıca (bunlar biraz farklı olacaktır yarasa dosyasına bu komutu koyabilirsiniz - değiştirmek %i
için%%i
):
portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
portKill.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
Sonra cmd'den bunu yapabilirsiniz:
portInfo.bat 8080
veya
portKill.bat 8080
.\portInfo.bat 800
PowerShell'de şöyle bir şey verin:C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
portInfo.bat
bir powershell terminalinde adlandırılmış bir dosyaya koydum , sonra da çalıştırdım .\portInfo.bat 8080
. Çıktı sadece toplu iş dosyasının içeriğiydi. Çok iyi bir şey göz ardı ediyorum. Not, Windows 10'da PowerShell 6.2.3 kullanıyorum. Ayrıca normal bir komut isteminde de denedim, ancak sonuç aynıydı: Komut dosyasının içeriğinin çıktısı. Eminim ki bu işi yapabilmek için çok önemli bir bilgi eksik.
/nh
: @tasklist /nh /fi "pid eq %i"
? Ve tam da kapı:Findstr ":8080"
Benim durumumda port (3000) hiç kullanılmadı ve netstat'ta görünmüyordu. Fakat! Windows için Uninstaller Docker sorunu çözdü.