ここで簡単な健全性チェックを行ってください。
マシンの特定のポートにpingできますか。その場合、例を提供できますか?
ping ip address portNum
のようなものを探しています。
Pingは [〜#〜] icmp [〜#〜] を使用しているため、ポートにpingすることはできません。これにはポートの概念がありません。ポートは トランスポートレイヤープロトコル に属しますTCPおよびUDPのようです。ただし、 nmap を使用して、ポートが開いているかどうかを確認できます。
nmap -p 80 example.com
編集:flokraが述べたように、nmapは単なるping-for-ports-thingyだけではありません。それはセキュリティ監査人とハッカーの親友であり、たくさんのクールなオプションが付属しています。すべての可能なフラグについてドキュメントを確認してください。
特定のポートへのTelnetセッションを開きます。次に例を示します。
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
セッションを閉じるには、 Ctrl+]。
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
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
いいえ、できません。ping
はICMPプロトコルを使用するため、ポートの概念。
次のようなcurl
コマンドを試してください。
$ curl Host:port
例えば:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
上記のコマンドは、ゼロ以外の終了ステータスコードでFailを返します。空または不正な形式の応答などの特定のケース(man curl
)、特定の終了コードを正常に処理する必要がある場合があります。詳細については、こちら post を確認してください。
私はPsPingを使用したより簡単な解決策を見つけました:
psping 192.168.2.2:5000
Windows Sysinternals の一部です。
PsPingはPing機能を実装しています。TCP ping、遅延、帯域幅測定。
Linuxでは hping を使用できますが、ICMPではなくTCPを使用します。
hping example.com -S -V -p 80
Pingは非常に具体的ですが、ポートが開いているかどうかを確認し、Windowsボックスを実行している場合は、 PortQry が役立ちます。
私は、接続の問題についてドメインコントローラーをテストするためにのみ使用しましたが、それは問題なく動作したので、動作するはずです。
以下は、素早く汚れた.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();
}
}
番号。
ポートで実行されているサービスがpingを理解するという保証はありません。 TCPまたはUDP?)pingを実行するポートの「フレーバー」の質問も開きます。pingの「プロトコル」はどちらも使用しないため(pingは [〜 #〜] icmp [〜#〜] )、それはあまり意味がありません。
これはクライアントマシンがWindows VistaまたはWindows 7であるVPNで機能する唯一のソリューションです。他のリストされている回答は単に機能しないためです。この回答は以前に削除されており、実際の一般的なケースに対する唯一のソリューションであるため、削除すべきではありませんでした。削除に利用できる申し立てがないため、他の回答を使用しようとしたときの不満を他のユーザーに知らせるために、再投稿しています。
次の例では、VNC /ポート5900が開いているVPN上のどのIPが、クライアントがWindows 7で実行されているかを確認します。
与えられた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で十分です。
Nagiosのcheck_tcpプローブがあなたの望みどおりの動作をすることは間違いありません。それらは here で見つかり、Nagiosコンテキストで使用するように設計されていますが、すべてスタンドアロンプログラムです。
$ ./check_tcp -H Host -p 22
TCP OK - 0.010 second response time on port 22|time=0.009946s;0.000000;0.000000;0.000000;10.000000
Bashシェルでは、TCP pseudo-device file を使用できます。例:
</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
Tcpingと呼ばれる、そのためのlightweigthツールがあります。 http://www.linuxco.de/tcping/tcping.html
私はグーグルで「特定のポートにpingを実行」してラッキーだと感じています: http://philwilks.blogspot.com/2008/01/ping-specific-port.html です。特定のポート
nmapを使用することもできます:nmap -p <port> <Host>
* nixオペレーティングシステムを実行している場合、「zenmap」をインストールして使用してみてください。これはnmapのGUIであり、新しいユーザーにとって非常に役立ついくつかの有用なスキャンプロファイルがあります。