ตรวจสุขภาพอย่างรวดเร็วที่นี่
คุณสามารถ ping พอร์ตเฉพาะของเครื่องและถ้าเป็นเช่นนั้นคุณสามารถให้ตัวอย่าง?
ping ip address portNum
ฉันกำลังมองหาสิ่งที่ต้องการ
ตรวจสุขภาพอย่างรวดเร็วที่นี่
คุณสามารถ ping พอร์ตเฉพาะของเครื่องและถ้าเป็นเช่นนั้นคุณสามารถให้ตัวอย่าง?
ping ip address portNum
ฉันกำลังมองหาสิ่งที่ต้องการ
คำตอบ:
คุณไม่สามารถปิงพอร์ตได้เนื่องจาก Ping กำลังใช้ICMPซึ่งไม่มีแนวคิดของพอร์ต พอร์ตเป็นของโปรโตคอลเลเยอร์การขนส่งเช่น TCP และ UDP อย่างไรก็ตามคุณสามารถใช้nmapเพื่อดูว่าพอร์ตเปิดอยู่หรือไม่
nmap -p 80 example.com
แก้ไข: ตามที่กล่าวถึง flokra, nmap เป็นมากกว่า ping-for-ports-thingy เป็นเพื่อนที่ดีที่สุดของผู้ตรวจสอบความปลอดภัยและแฮ็คเกอร์และมาพร้อมกับตัวเลือกสุดเจ๋งมากมาย ตรวจสอบ doc เพื่อดูค่าสถานะที่เป็นไปได้ทั้งหมด
-PN
ข้ามการค้นพบโฮสต์ nmap ก่อนที่จะทำการทดสอบพอร์ตที่กำหนด
nmap windows
) แต่มันไม่สามารถใช้งานผ่าน VPN ได้ PaPing ดูเหมือนจะไม่สามารถสแกนช่วงของที่อยู่ได้ ฉันได้โพสต์สคริปต์ Python ด้านล่างซึ่งจะทำงานผ่าน VPN เพื่อสแกนช่วงของพอร์ตในช่วงของที่อยู่
brew install nmap
หรือ MacPorts
เปิดเซสชัน telnet ไปยังพอร์ตเฉพาะเช่น:
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
หากต้องการปิดเซสชั่นของคุณกด+Ctrl]
netcat
ยังใช้งานได้ดีและ verbose น้อย
netcat
ตอนนี้เป็น MacOS HighSierra ในตัวซึ่งสามารถติดตั้ง telnet ได้จากbrew install telnet
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
time
Like ในtime nc -vz www.example.com 80
และคุณจะมี RTT เช่นกัน
หากคุณกำลังติดตั้ง windows ด้วย powershell v4 หรือใหม่กว่าคุณสามารถใช้โมดูล power-netconnection powershell ทดสอบ:
Test-NetConnection <host> -port <port>
ตัวอย่าง: ทดสอบ -NetConnection example.com -port 80
cmdlet 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 *
สำหรับการ paping อย่างต่อเนื่อง (?)
ไม่คุณไม่สามารถทำได้เพราะping
ใช้โปรโตคอล ICMPซึ่งไม่มีแนวคิดเรื่องพอร์ต
ลองใช้curl
คำสั่งเช่น:
$ curl host:port
ตัวอย่างเช่น:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
คำสั่งดังกล่าวจะกลับมาล้มเหลวในรหัสสถานะทางออกที่ไม่ใช่ศูนย์ ในบางกรณีเช่นการตอบสนองที่ว่างเปล่าหรือมีรูปแบบไม่ถูกต้อง (ดู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, การ ping TCP, เวลาแฝงและแบนด์วิดธ์
บน Linux คุณสามารถใช้hpingแต่ใช้ TCP แทน ICMP
hping example.com -S -V -p 80
flags=SA
(เช่น SYN ACK) และถ้ามันถูกปิดคุณจะได้รับflags=SR
(เช่น SYN RST) โปรดทราบว่าคุณอาจไม่ต้องการ-V
ตั้งค่าสถานะที่นี่ แต่คุณต้องใช้ sudo / root เพื่อเรียกใช้ hping
ping
ปิงจนหยุด
Ping นั้นเฉพาะเจาะจงมาก แต่ถ้าคุณต้องการตรวจสอบว่าพอร์ตเปิดอยู่หรือไม่และกำลังเรียกใช้กล่อง Windows แล้วPortQryเป็นเพื่อนของคุณ
ฉันใช้มันเพื่อทดสอบ Domain Controllers สำหรับปัญหาการเชื่อมต่อเท่านั้น แต่ก็ใช้งานได้ดีดังนั้นควรใช้กับคุณ
นี่คือแอปคอนโซล 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 ใช้งานโดยใช้ICMP ) จึงไม่สมเหตุสมผลนัก
ฉันค่อนข้างแน่ใจว่า Nagios check_tcp probe ทำสิ่งที่คุณต้องการ พวกเขาสามารถพบได้ที่นี่และแม้ว่าได้รับการออกแบบมาเพื่อใช้ในบริบท 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
นี่เป็นทางออกเดียวที่ใช้งานได้กับ VPN กับเครื่องไคลเอนต์ที่เป็น Windows Vista หรือ Windows 7เนื่องจากคำตอบอื่น ๆ ที่ระบุไว้ไม่สามารถใช้งานได้ คำตอบนี้ถูกลบไปก่อนหน้านี้แล้วและไม่ควรเป็นเพราะนี่เป็นทางออกเดียวสำหรับกรณีทั่วไปที่เกิดขึ้นจริง เนื่องจากไม่มีการอุทธรณ์สำหรับการลบฉันจึงทำการโพสต์ใหม่เพื่อบันทึกความยุ่งยากที่ฉันมีเมื่อพยายามใช้คำตอบอื่น ๆ
ตัวอย่างด้านล่างพบว่า IP ใดบน VPN ที่มี VNC / พอร์ต 5900 เปิดพร้อมกับไคลเอนต์ที่ทำงานบน Windows 7
สคริปต์ Python (v2.6.6) สั้น ๆ เพื่อสแกนรายการ IP และพอร์ตที่กำหนด:
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.
ตัวแปรสี่ตัวที่อยู่ด้านบนจะต้องเปลี่ยนให้เหมาะสมกับการหมดเวลาเครือข่ายโฮสต์และพอร์ตที่จำเป็น 5.0 วินาทีบน VPN ของฉันดูเหมือนจะเพียงพอที่จะทำงานอย่างถูกต้องสม่ำเสมอไม่น้อย (เสมอ) ให้ผลลัพธ์ที่แม่นยำ ในเครือข่ายท้องถิ่นของฉัน 0.5 มีมากเกินพอ
มีเครื่องมือ lightweigth สำหรับมันเรียกว่า tcping: http://www.linuxco.de/tcping/tcping.html
ใน Bash shell คุณสามารถใช้ไฟล์ 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" ซึ่งเป็น GUI สำหรับ nmap และมีโปรไฟล์การสแกนที่มีประโยชน์มากมายซึ่งเป็นประโยชน์อย่างมากสำหรับผู้ใช้ใหม่