Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 脚本以查找服务&;监听端口的网站_Windows_Powershell_Tcp_Port - Fatal编程技术网

Windows 脚本以查找服务&;监听端口的网站

Windows 脚本以查找服务&;监听端口的网站,windows,powershell,tcp,port,Windows,Powershell,Tcp,Port,我在机器上安装了一些网站和服务。它们被分配了端口号。现在,每次我想安装新服务器时,我都必须检查端口,看看现有的端口号是否不再使用 我想写一个我知道可以写一个脚本来帮助获取服务和网站使用的端口号…但是从get process例如,无法获取端口 有人能帮我找到所选进程的统计信息吗? 或者有更好的方法来处理这个问题?也许这是一个愚蠢的答案,但为什么不: $procstats = netstat -o 您现在可以从中获取函数文件。您还可以在Netstat上找到一个很好的解决方案 netstat -a -

我在机器上安装了一些网站和服务。它们被分配了端口号。现在,每次我想安装新服务器时,我都必须检查端口,看看现有的端口号是否不再使用

我想写一个我知道可以写一个脚本来帮助获取服务和网站使用的端口号…但是从
get process
例如,无法获取端口

有人能帮我找到所选进程的统计信息吗?
或者有更好的方法来处理这个问题?

也许这是一个愚蠢的答案,但为什么不:

$procstats = netstat -o
您现在可以从中获取函数文件。

您还可以在
Netstat
上找到一个很好的解决方案

netstat -a -n -o

虽然我知道PowerShell完全能够运行
netstat
并捕获输出,但它仍然是文本解析,而不像PowerShell那样面向对象。因此,我提交了我的
netstat-aon
的PowerShell复制,并添加了服务信息。它没有做的是按照原始问题的规定识别特定的网站监听端口。对我来说,这更像是一个IIS脚本,而不是一个通用的网络脚本。再一次,非常感谢(我也在这里发布了这段代码)

$TypeDefinition=@”
使用制度;
使用System.Runtime.InteropServices;
使用系统集合;
使用System.Collections.Generic;
使用System.Linq;
// https://msdn2.microsoft.com/en-us/library/aa366073.aspx
名称空间IPHelper{
// https://msdn2.microsoft.com/en-us/library/aa366913.aspx
[StructLayout(LayoutKind.Sequential)]
公共结构MIB\u TCPROW\u所有者\u PID{
公营单位国家;
公共uint localAddr;
[Marshallas(UnmanagedType.ByValArray,SizeConst=4)]
公共字节[]本地端口;
公共单元远程地址;
[Marshallas(UnmanagedType.ByValArray,SizeConst=4)]
公共字节[]远程端口;
公有制;
}
// https://msdn2.microsoft.com/en-us/library/aa366921.aspx
[StructLayout(LayoutKind.Sequential)]
public struct MIB_TCPTABLE_OWNER_PID{
公共部门;
[Marshallas(UnmanagedType.ByValArray,ArraySubType=UnmanagedType.Struct,SizeConst=1)]
公共MIB_TCPROW_OWNER_PID[]表;
}
// https://msdn.microsoft.com/en-us/library/aa366896
[StructLayout(LayoutKind.Sequential)]
公共结构MIB\u TCP6行\u所有者\u PID{
[Marshallas(UnmanagedType.ByValArray,SizeConst=16)]
公共字节[]localAddr;
公共uint localScopeId;
[Marshallas(UnmanagedType.ByValArray,SizeConst=4)]
公共字节[]本地端口;
[Marshallas(UnmanagedType.ByValArray,SizeConst=16)]
公共字节[]远程地址;
公共uint remoteScopeId;
[Marshallas(UnmanagedType.ByValArray,SizeConst=4)]
公共字节[]远程端口;
公营单位国家;
公有制;
}
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa366905
[StructLayout(LayoutKind.Sequential)]
公共结构MIB\u TCP6表\u所有者\u PID{
公共部门;
[Marshallas(UnmanagedType.ByValArray,ArraySubType=UnmanagedType.Struct,SizeConst=1)]
公共MIB_TCP6ROW_OWNER_PID[]表;
}
// https://msdn2.microsoft.com/en-us/library/aa366386.aspx
公共枚举TCP_表_类{
TCP\u表\u基本\u侦听器,
TCP\u表\u基本\u连接,
TCP\u表\u基本\u全部,
TCP\u表\u所有者\u PID\u侦听器,
TCP\u表\u所有者\u PID\u连接,
TCP\u表\u所有者\u PID\u全部,
TCP\u表\u所有者\u模块\u侦听器,
TCP\u表\u所有者\u模块\u连接,
TCP\u表\u所有者\u模块\u全部
}
// https://msdn.microsoft.com/en-us/library/aa366896.aspx
公共枚举MIB_TCP_状态{
MIB_TCP_状态_关闭,
MIB_TCP_STATE_LISTEN,
MIB_TCP_STATE_SYN_已发送,
MIB_TCP_STATE_SYN_RCVD,
MIB_TCP_STATE_ESTAB,
MIB_TCP_STATE_FIN_WAIT1,
MIB_TCP_STATE_FIN_WAIT2,
MIB\u TCP\u状态\u关闭\u等待,
MIB_TCP_状态_关闭,
MIB_TCP_STATE_LAST_ACK,
MIB\u TCP\u状态\u时间\u等待,
MIB\u TCP\u状态\u删除\u TCB
}
公共静态类IPHelperAPI{
[DllImport(“iphlapi.dll”,SetLastError=true)]
内部静态外部单元GetExtendedTcpTable(
IntPtr tcpTable,
参考int tcpTableLength,
布尔排序,
int ipVersion,
TCP\表\类tcpTableType,
保留int=0);
}
公共类IPHelperWrapper:IDisposable{
public const int AF_INET=2;//IP_v4=System.Net.Sockets.AddressFamily.InterNetwork
public const int AF_INET6=23;//IP_v6=System.Net.Sockets.AddressFamily.InterNetworkV6
//为本地计算机创建新包装
公共IPHelperWrapper(){}
//处理掉这个包装
public void Dispose(){GC.SuppressFinalize(this);}
公共列表GetAllTCPv4Connections(){
返回连接(AF_INET);
}
公共列表GetAllTCPv6Connections(){
返回gettcpcconnections(AF_INET6);
}
公共列表GetTCPConnections(intipversion){//IPR=行类型,IPT=表类型
IPR[]表格行;
int buffSize=0;
var dwNumEntriesField=typeof(IPT).GetField(“dwNumEntries”);
//我们需要多少内存?
uint ret=IPHelperAPI.GetExtendedTcpTable(IntPtr.Zero,ref buffSize,true,ipVersion,TCP\u TABLE\u CLASS.TCP\u TABLE\u OWNER\u PID\u ALL);
IntPtr tcpTablePtr=Marshal.AllocHGlobal(buffSize);
试一试{
ret=IPHelperAPI.GetExtendedTcpTable(tcpTablePtr,ref buffSize,true,ipVersion,TCP\u TABLE\u CLASS.TCP\u TABLE\u OWNER\u PID\u ALL);
如果(ret=
netstat -a -n -o
$TypeDefinition=@"
using System;
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

// https://msdn2.microsoft.com/en-us/library/aa366073.aspx
namespace IPHelper {

    // https://msdn2.microsoft.com/en-us/library/aa366913.aspx
    [StructLayout(LayoutKind.Sequential)]
    public struct MIB_TCPROW_OWNER_PID {
        public uint state;
        public uint localAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public byte[] localPort;
        public uint remoteAddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public byte[] remotePort;
        public uint owningPid;
    }

    // https://msdn2.microsoft.com/en-us/library/aa366921.aspx
    [StructLayout(LayoutKind.Sequential)]
    public struct MIB_TCPTABLE_OWNER_PID {
        public uint dwNumEntries;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 1)]
        public MIB_TCPROW_OWNER_PID[] table;
     }

    // https://msdn.microsoft.com/en-us/library/aa366896
    [StructLayout(LayoutKind.Sequential)]
    public struct MIB_TCP6ROW_OWNER_PID {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] localAddr;
        public uint localScopeId;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public byte[] localPort;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
        public byte[] remoteAddr;
        public uint remoteScopeId;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public byte[] remotePort;
        public uint state;
        public uint owningPid;
    }

    // https://msdn.microsoft.com/en-us/library/windows/desktop/aa366905
    [StructLayout(LayoutKind.Sequential)]
    public struct MIB_TCP6TABLE_OWNER_PID {
       public uint dwNumEntries;
       [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 1)]
       public MIB_TCP6ROW_OWNER_PID[] table;
    }

    // https://msdn2.microsoft.com/en-us/library/aa366386.aspx
    public enum TCP_TABLE_CLASS {
        TCP_TABLE_BASIC_LISTENER,
        TCP_TABLE_BASIC_CONNECTIONS,
        TCP_TABLE_BASIC_ALL,
        TCP_TABLE_OWNER_PID_LISTENER,
        TCP_TABLE_OWNER_PID_CONNECTIONS,
        TCP_TABLE_OWNER_PID_ALL,
        TCP_TABLE_OWNER_MODULE_LISTENER,
        TCP_TABLE_OWNER_MODULE_CONNECTIONS,
        TCP_TABLE_OWNER_MODULE_ALL
    }

    // https://msdn.microsoft.com/en-us/library/aa366896.aspx
    public enum MIB_TCP_STATE {
        MIB_TCP_STATE_CLOSED,
        MIB_TCP_STATE_LISTEN,
        MIB_TCP_STATE_SYN_SENT,
        MIB_TCP_STATE_SYN_RCVD,
        MIB_TCP_STATE_ESTAB,
        MIB_TCP_STATE_FIN_WAIT1,
        MIB_TCP_STATE_FIN_WAIT2,
        MIB_TCP_STATE_CLOSE_WAIT,
        MIB_TCP_STATE_CLOSING,
        MIB_TCP_STATE_LAST_ACK,
        MIB_TCP_STATE_TIME_WAIT,
        MIB_TCP_STATE_DELETE_TCB
    }

    public static class IPHelperAPI {
        [DllImport("iphlpapi.dll", SetLastError = true)]
        internal static extern uint GetExtendedTcpTable(
            IntPtr tcpTable,
            ref int tcpTableLength,
            bool sort,
            int ipVersion,
            TCP_TABLE_CLASS tcpTableType,
            int reserved=0);
    }

    public class IPHelperWrapper : IDisposable {

        public const int AF_INET = 2;    // IP_v4 = System.Net.Sockets.AddressFamily.InterNetwork
        public const int AF_INET6 = 23;  // IP_v6 = System.Net.Sockets.AddressFamily.InterNetworkV6

        // Creates a new wrapper for the local machine
        public IPHelperWrapper() { }

        // Disposes of this wrapper
        public void Dispose() { GC.SuppressFinalize(this); }

        public List<MIB_TCPROW_OWNER_PID> GetAllTCPv4Connections() {
            return GetTCPConnections<MIB_TCPROW_OWNER_PID, MIB_TCPTABLE_OWNER_PID>(AF_INET);
        }

        public List<MIB_TCP6ROW_OWNER_PID> GetAllTCPv6Connections() {
            return GetTCPConnections<MIB_TCP6ROW_OWNER_PID, MIB_TCP6TABLE_OWNER_PID>(AF_INET6);
        }

        public List<IPR> GetTCPConnections<IPR, IPT>(int ipVersion) { //IPR = Row Type, IPT = Table Type

            IPR[] tableRows;
            int buffSize = 0;
            var dwNumEntriesField = typeof(IPT).GetField("dwNumEntries");

            // how much memory do we need?
            uint ret = IPHelperAPI.GetExtendedTcpTable(IntPtr.Zero, ref buffSize, true, ipVersion, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL);
            IntPtr tcpTablePtr = Marshal.AllocHGlobal(buffSize);

            try {
                ret = IPHelperAPI.GetExtendedTcpTable(tcpTablePtr, ref buffSize, true, ipVersion, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL);
                if (ret != 0) return new List<IPR>();

                // get the number of entries in the table
                IPT table = (IPT)Marshal.PtrToStructure(tcpTablePtr, typeof(IPT));
                int rowStructSize = Marshal.SizeOf(typeof(IPR));
                uint numEntries = (uint)dwNumEntriesField.GetValue(table);

                // buffer we will be returning
                tableRows = new IPR[numEntries];

                IntPtr rowPtr = (IntPtr)((long)tcpTablePtr + 4);
                for (int i = 0; i < numEntries; i++) {
                    IPR tcpRow = (IPR)Marshal.PtrToStructure(rowPtr, typeof(IPR));
                    tableRows[i] = tcpRow;
                    rowPtr = (IntPtr)((long)rowPtr + rowStructSize);   // next entry
                }
            }
            finally {
                // Free the Memory
                Marshal.FreeHGlobal(tcpTablePtr);
            }
            return tableRows != null ? tableRows.ToList() : new List<IPR>();
        }

        // Occurs on destruction of the Wrapper
        ~IPHelperWrapper() { Dispose(); }

    } // wrapper class
} // namespace
"@
Add-Type -TypeDefinition $TypeDefinition -PassThru | Out-Null

function NetStat {

  $x=New-Object IPHelper.IPHelperWrapper
  $y=$x.GetAllTCPv4Connections()
  $services=Get-WmiObject -Namespace "root\cimv2" -Class "Win32_Service"
  $StateList=@("UNKNOWN","CLOSED","LISTEN","SYN-SENT","SYN-RECEIVED","ESTABLISHED","FIN-WAIT-1","FIN-WAIT-2","CLOSE-WAIT","CLOSING","LAST-ACK","TIME-WAIT","DELETE-TCB")
  $output=@()
  for ($i=0; $i -lt $y.Count; $i++) {
    $objOutput=New-Object -TypeName PSObject
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "LocalAddress" -Value ([System.Net.IPAddress]::new($y[$i].localAddr).IPAddressToString)
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "RemoteAddress" -Value ([System.Net.IPAddress]::new($y[$i].remoteAddr).IPAddressToString)
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "LocalPort" -Value ($y[$i].localPort[1]+($y[$i].localPort[0]*0x100)+($y[$i].localPort[3]*0x1000)+($y[$i].localPort[2]*0x10000))
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "RemotePort" -Value ($y[$i].remotePort[1]+($y[$i].remotePort[0]*0x100)+($y[$i].remotePort[3]*0x1000)+($y[$i].remotePort[2]*0x10000))
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "PID" -Value $y[$i].owningPid
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "ProcessName" -Value ((Get-Process -Id $y[$i].owningPid).ProcessName)
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "StateValue" -Value $y[$i].state
    Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "State" -Value $StateList[$y[$i].state]
    $boolNoService=$true
    for ($j=0; $j -lt $services.Count; $j++) {
      if ($services[$j].ProcessId -eq $y[$i].owningPid) {
        Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "ServiceName" -Value $services[$j].Caption
        $boolNoService=$false
        break;
      }
    }
    if ($boolNoService) { Add-Member -InputObject $objOutput -MemberType NoteProperty -Name "ServiceName" -Value $null }
    $output+=$objOutput
  }
  $output
}

NetStat