현재 우리는 PowerShell에서 일부 논리를 사용하여 netstat -ano
모든 TCP 및 UDP 결과를 가져오고 볼 필요가 없는 결과를 필터링한 다음 이를 CSV로 내보냅니다. 우리는 결과에 다음만 포함하기를 원합니다.청취그리고(공백)그리고루프백이 아닌 IP.
한 가지 예는 다음과 같습니다 netstat -ano | Where-Object{$_ -notlike '*127.?.?.?*' -and $_ -notmatch '\[::1]' -and $_ -notmatch 'TIME_WAIT' -and $_ -notmatch 'CLOSE*' -and $_ -notmatch 'ESTABLISHED' -and $_ -notmatch 'SYN_*' -and $_ -notmatch 'FIN_*'}
.
그러나 우리는 스크립트를 동시에 실행하는 경우 다른 시간에 발생할 수 있는 다른 옵션을 놓치고 싶지 않습니다. 방금 찾은 것 중 하나는LAST_ACK그리고 우리 논리에 아직 포함되지 않은 다른 옵션이 무엇인지 모르겠습니다.
모든 일치 항목을 필터링하는 대신 해당 논리를 뒤집는 방법이 있습니까? 다음 중 하나에 해당하는 일치 항목만 포함할 수 있습니까?(공백)또는청취또는루프백이 아닌 IP? 그렇지 않다면 그 논리에 더 많은 것을 추가할 수 있지만 일부 전문가의 생각을 보고 싶었을 뿐입니다.
답변: 모든 주를 찾았습니다.여기모든 항목을 포함하도록 업데이트했습니다.
답변1
필요하지 않을 때 바퀴를 재발명하지 마십시오. 합법적인 질문은 이미 웹 전체에서 다양한 방식으로 여러 번 질문되고 답변되었을 가능성이 있습니다. 한 번의 검색으로 절대적인 답변을 찾지 못할 수도 있으며, 다른 문자열(들), 문자열 일치, 정확한 문자열 일치, 부분 문자열 일치, 사이트별 일치 등을 사용하여 검색해야 할 수도 있습니다.
조회수
Get-NetworkStatistics - 필터링이 포함된 netstat -ano
이 코드는 Shay Levy의 Get-NetworkStatistics 함수에서 차용한 것입니다. 이 기능은 로컬 또는 원격 시스템에서 netstat -ano를 실행하고 지정된 경우 프로세스 이름, 주소, 포트, 프로토콜 또는 상태별로 결과를 필터링합니다. get-process를 사용하여 각 PID에 대해 프로세스 이름을 가져옵니다.
https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71
있는 그대로 사용하거나 필요에 따라 수정하세요.
답변2
내 생각에 당신이 원하는 것을 처리하는 한 가지 방법은 다음과 같습니다. 텍스트 줄을 원하는 대로 필터링할 수 있는 PoSh 개체로 변환합니다. 이것은 제가 3~4년 전에 작성한 오래된 코드입니다.
그것이 무엇을 하는지 ...
netstat
$Var에 대한 호출 결과를 저장합니다.- 불필요한 줄을 정리합니다.
- 각 줄을 CSV 줄로 변환합니다.
- CSV 라인 모음을 PoSh 객체 배열로 변환합니다.
- 컬렉션을 표시합니다
.PID
0번째 객체의 속성을 표시합니다.
코드 ...
$Raw_Result = netstat -a -o -n
# get rid of the unwanted 1st three lines
$Raw_Result = $Raw_Result | Select-Object -Skip 3
# remove the `---` line
$Raw_Result = $Raw_Result | Select-String -Pattern '[^---]'
$Cleaned_Result = foreach ($Line in $Raw_Result)
{
$Line = $Line.ToString().Trim()
if ($Line[53] -eq ' ')
{
$Line = $Line.Insert(53, '-NA-')
}
$Line = $Line -replace ' {2,}', ','
$Line
}
$Final_Result = $Cleaned_Result | ConvertFrom-Csv
#$Raw_Result
#$Cleaned_Result
$Final_Result
Write-Output ''
$Final_Result[0].PID
잘린 출력 ...
Proto : UDP
Local Address : [::]:55356
Foreign Address : *:*
State : -NA-
PID : 3352
[*...snip...*]
Proto : UDP
Local Address : [fe80::d129:4be7:98da:e357%14]:53382
Foreign Address : *:*
State : -NA-
PID : 3908
1308
이 모든 작업의 이점은 이제 상당히 표준적인 개체를 쉽게 정렬하거나 필터링할 수 있는 컬렉션을 갖게 된다는 것입니다. [이를 드러내고 웃다]
답변3
주를 모두 찾았어요여기방금 마지막 항목을 포함하도록 업데이트했는데 이제 모두 거기에 있습니다. 그것들은 아래와 같습니다:
CLOSE_WAIT, CLOSED, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, SYN_RECEIVED, SYN_SEND 및 TIME_WAIT.