Yanıtlar:
Ping, bağlantı noktaları kavramına sahip olmayan ICMP'yi kullandığı için bağlantı noktalarına ping yapamazsınız . Bağlantı noktaları, TCP ve UDP gibi taşıma katmanı protokollerine aittir . Ancak, bağlantı noktalarının açık olup olmadığını görmek için nmap kullanabilirsiniz.
nmap -p 80 example.com
Düzenleme: flokra'nın da belirttiği gibi, nmap sadece portlar için bir şeylerden ibaret değildir. Güvenlik denetçileri ve bilgisayar korsanlarının en iyi arkadaşıdır ve bir sürü harika seçeneğe sahiptir. Tüm olası bayraklar için doktora göz atın.
-PN
Nmap genellikle verilen bağlantı noktasını sınamadan önce yaptığı gibi ana bilgisayar keşif atlama işlemini eklemek isteyebilirsiniz .
nmap windows
), fakat VPN üzerinden çalışmaz. PaPing bir adres aralığını tarayamadı gibi görünüyordu. Aşağıda, bir adres aralığında bir dizi bağlantı noktasını taramak için VPN üzerinden çalışacak olan Python komut dosyasını gönderdim.
brew install nmap
veya MacPorts üzerinden yükleyebilirsiniz .
Belirli bir bağlantı noktasına bir telnet oturumu açın, örneğin:
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
Oturumunuzu kapatmak için Ctrl+ tuşuna basın ].
netcat
Ayrıca harika çalışıyor ve daha az ayrıntılı.
netcat
artık yerleşik MacOS HighSierra, telnet HomeBrew'den kurulabilirbrew install telnet
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
time
benzer kullanın time nc -vz www.example.com 80
ve siz de bir tür RTT olacaktır.
Powershell v4 veya daha yenisiyle bir windows kurulumundaysanız, test netconnection powershell modülünü kullanabilirsiniz:
Test-NetConnection <host> -port <port>
Örnek: Test-NetConnection example.com -port 80
Bu cmdlet'in ayrıca diğer adı da vardır tnc
. Örneğintnc example.com -port 80
PaPing'i kullanabilirsiniz:
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 *
sürekli paping için kullanın (?).
Hayır, yapamazsınız, çünkü port konsepti olmayan ICMP protokolünüping
kullanır .
curl
Komutu dene , şöyle:
$ curl host:port
Örneğin:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
Yukarıdaki komut geri dönecektir Sıfır olmayan bir çıkış durumu kodlarında başarısız . Boş veya hatalı biçimlendirilmiş yanıt gibi bazı özel durumlarda (bkz. man curl
), Belirli çıkış kodlarını başarılı şekilde ele almak isteyebilirsiniz, bu nedenle lütfen daha ayrıntılı bir açıklama için bu postayı kontrol edin .
curl
CentOS'ta varsayılan olarak mevcut, bu yüzden hiçbir şey yüklemem gerekmiyor.
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 kullanarak daha basit bir çözüm buldum:
psping 192.168.2.2:5000
Windows Sysinternals'ın bir parçası .
PsPing, Ping işlevi, TCP ping, gecikme süresi ve bant genişliği ölçümü uygular.
Linux'ta hping kullanabilirsiniz, ancak ICMP yerine TCP kullanır.
hping example.com -S -V -p 80
flags=SA
Açıksa, alırsınız (yani, SYN ACK) ve kapalıysa, alırsınız flags=SR
(örneğin, SYN RST). -V
Buradaki bayraklara muhtemelen ihtiyacınız olmadığını , ancak hping'i çalıştırmak için sudo / root uygulamasına ihtiyacınız olduğunu unutmayın.
ping
ve durdurulana kadar ping bildirir .
Ping çok özeldir ancak bir portun açık olup olmadığını ve bir Windows kutusu çalıştırıp kullanmadığını kontrol etmek istiyorsanız PortQry arkadaşınızdır.
Yalnızca Bağlantı sorunları için Etki Alanı Denetleyicilerini test etmek için kullandım, ancak bunun için bir tedavi çalıştı, bu yüzden sizin için çalışmalı.
İşte hızlı ve kirli bir .NET konsol uygulaması:
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();
}
}
Nagios check_tcp probunun istediğinizi yaptığından eminim. Burada bulunabilirler ve Nagios bağlamında kullanılmak üzere tasarlanmış olsalar da, hepsi bağımsız programlardır.
$ ./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
Bu, listelenen yanıtların çalışmadığı için VPN için çalışan makinenin Windows Vista veya Windows 7 olmasıyla çalışan tek çözümdür . Bu cevap daha önce silinmişti ve olmamalıydı, çünkü bu gerçek dünyadaki ortak bir durum için tek çözümdü. Silme işlemi için temyiz başvurusu bulunmadığından, diğer cevapları kullanmaya çalışırken yaşadığım sıkıntıyı diğerlerinden kurtarmak için tekrar gönderiyorum.
Aşağıdaki örnek, VPN'de VNC / port 5900 olan IP'lerin Windows 7'de çalışan istemci ile açıldığını göstermektedir.
Belirli bir IP ve Bağlantı Noktası listesini taramak için kısa bir Python (v2.6.6) komut dosyası:
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."
Sonuçlar şuna benziyordu:
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.
En üstteki dört değişkenin, zaman aşımına, ağa, ana makinelere ve gereken bağlantı noktalarına uygun olacak şekilde değiştirilmesi gerekir. VPN'imdeki 5.0 saniye, tutarlı bir şekilde düzgün çalışması için yeterliydi, daha az kesin sonuç vermedi. Yerel ağımda, 0.5, fazlasıyla yeterliydi.
Http://www.linuxco.de/tcping/tcping.html adlı tcping adında bir lightweigth aracı var.
Bash kabuğunda, örneğin TCP sahte aygıt dosyasını kullanabilirsiniz :
</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed
1 saniyelik zaman aşımını uygulayan sürüm:
timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
Bir * nix işletim sistemi kullanıyorsanız, "zenmap" uygulamasını kurmayı ve kullanmayı deneyin, nmap için bir GUI'dir ve yeni kullanıcıya çok yardımcı olan birkaç yararlı tarama profiline sahiptir.