回答:
Pingはポートの概念を持たないICMPを使用しているため、ポートにpingすることはできません。ポートは、TCPやUDPなどのトランスポート層プロトコルに属します。ただし、nmapを使用してポートが開いているかどうかを確認できます。
nmap -p 80 example.com
編集:Flokraが述べたように、nmapは単なるping-for-ports-thingy以上のものです。それはセキュリティ監査人とハッカーの親友であり、たくさんのクールなオプションが付属しています。すべてのフラグについてドキュメントを確認してください。
-PN
特定のポートをテストする前にnmapが通常行うホスト検出をスキップするために追加することができます。
nmap windows
)からWindowsにnmap / can /をインストールできますが、VPNでは機能しません。PaPingは、アドレスの範囲をスキャンできないようでした。以下のPythonスクリプトを投稿しました。このスクリプトは、VPNを介して動作し、アドレス範囲のポート範囲をスキャンします。
brew install nmap
またはMacPorts 経由でnmapをインストールできます。
特定のポートへのtelnetセッションを開きます。次に例を示します。
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
セッションを閉じるには、Ctrl+ を押します]。
netcat
うまく機能し、冗長性も低くなります。
netcat
現在、MacOS HighSierraが組み込まれています。HomeBrewからTelnetをインストールできますbrew install telnet
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
time
like inで使用するとtime nc -vz www.example.com 80
、RTTのようなものもあります。
powershell v4以降のWindowsインストールを使用している場合は、test-netconnection powershellモジュールを使用できます。
Test-NetConnection <host> -port <port>
例:Test-NetConnection example.com -port 80
このコマンドレットにはエイリアスもありtnc
ます。例えばtnc example.com -port 80
PaPingを使用できます。
http://code.google.com/p/paping
C:\>paping.exe www.google.com -p 80 -c 4
paping v1.5.1 - Copyright (c) 2010 Mike Lovell
Connecting to www.l.google.com [209.85.225.147] on TCP 80:
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=25.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connection statistics:
Attempted = 4, Connected = 4, Failed = 0 (0.00%)
Approximate connection times:
Minimum = 24.00ms, Maximum = 25.00ms, Average = 24.25ms
-c *
定数papinging(?)に使用します。
curl
次のようなコマンドを試してください:
$ curl host:port
例えば:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
上記のコマンドは、ゼロ以外の終了ステータスコードでFailを返します。空の応答や不正な形式の応答(を参照man curl
)などの特定のケースでは、特定の終了コードを正常に処理したい場合があります。詳細については、この投稿を確認してください。
curl
CentOSにはデフォルトで存在するため、これを気に入っているので、何もインストールする必要はありません。
IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
PsPingを使用した簡単なソリューションを見つけました。
psping 192.168.2.2:5000
Windows Sysinternalsの一部です。
PsPingは、Ping機能、TCP ping、遅延、帯域幅測定を実装しています。
Linuxではhpingを使用できますが、ICMPではなくTCPを使用します。
hping example.com -S -V -p 80
flags=SA
SYN ACKを取得し、閉じている場合はflags=SR
SYN RST を取得します。-V
ここでフラグはおそらく必要ないことに注意してください。ただし、hpingを実行するにはsudo / rootが必要です。
ping
停止するまでRTT遅延やpingを報告します。
以下は、手早くて汚い.NETコンソールアプリです。
static void Main(string[] args)
{
string addressArgument = null, portArgument = null;
System.Net.Sockets.TcpClient tcpClient = null;
try
{
addressArgument = args[0];
portArgument = args[1];
int portNumber;
portNumber = Int32.Parse(portArgument);
tcpClient = new System.Net.Sockets.TcpClient();
tcpClient.ReceiveTimeout = tcpClient.SendTimeout = 2000;
IPAddress address;
if (IPAddress.TryParse(args[0], out address))
{
var endPoint = new System.Net.IPEndPoint(address, portNumber);
tcpClient.Connect(endPoint);
}
else
{
tcpClient.Connect(addressArgument, portNumber);
}
Console.WriteLine("Port {0} is listening.", portArgument);
}
catch (Exception e)
{
if (e is SocketException || e is TimeoutException)
{
Console.WriteLine("Not listening on port {0}.", portArgument);
}
else
{
Console.WriteLine("Usage:");
Console.WriteLine(" portquery [host|ip] [port]");
}
}
finally
{
if (tcpClient != null)
tcpClient.Close();
}
}
これは、クライアントマシンがWindows VistaまたはWindows 7であるVPNで機能する唯一のソリューションです。リストされている他の回答は機能しないだけです。この回答は以前に削除されたものであり、削除されるべきではありません。これは、実際の一般的なケースに対する唯一の解決策です。削除するためのアピールがないため、他の回答を使用しようとしていたことに対するフラストレーションを他の人に保存するために、再投稿しています。
以下の例では、Windows 7で実行されているクライアントでVNC /ポート5900が開いているVPN上のIPを見つけます。
IPおよびポートの特定のリストをスキャンする短いPython(v2.6.6)スクリプト:
from socket import *
fTimeOutSec = 5.0
sNetworkAddress = '192.168.1'
aiHostAddresses = range(1,255)
aiPorts = [5900]
setdefaulttimeout(fTimeOutSec)
print "Starting Scan..."
for h in aiHostAddresses:
for p in aiPorts:
s = socket(AF_INET, SOCK_STREAM)
address = ('%s.%d' % (sNetworkAddress, h))
result = s.connect_ex((address,p))
if ( 0 == result ):
print "%s:%d - OPEN" % (address,p)
elif ( 10035 == result ):
#do nothing, was a timeout, probably host doesn't exist
pass
else:
print "%s:%d - closed (%d)" % (address,p,result)
s.close()
print "Scan Completed."
結果は次のようになりました。
Starting Scan...
192.168.1.1:5900 - closed (10061)
192.168.1.7:5900 - closed (10061)
192.168.1.170:5900 - OPEN
192.168.1.170:5900 - closed (10061)
Scan Completed.
上部の4つの変数は、必要なタイムアウト、ネットワーク、ホスト、ポートに合わせて変更する必要があります。VPNでの5.0秒は、一貫して適切に動作するのに十分であるように見えましたが、正確な結果が得られなかった(常に)ことは少なくなりました。私のローカルネットワークでは、0.5で十分でした。
tcpingと呼ばれる軽量のツールがあります:http : //www.linuxco.de/tcping/tcping.html
Bashシェルでは、TCP 疑似デバイスファイルを使用できます。例:
</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed
1秒のタイムアウトを実装するバージョンは次のとおりです。
timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
* nixオペレーティングシステムを実行している場合は、「zenmap」をインストールして使用してみてください。nmapのGUIであり、新しいユーザーにとって非常に役立つ便利なスキャンプロファイルがいくつかあります。