Có thể ping một địa chỉ: cổng?


212

Tôi không tham gia mạng và tôi có câu hỏi sau đây liên quan đến lệnh ping Linux .

Tôi chỉ có thể ping một địa chỉ? Ví dụ:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

Hoặc tôi cũng có thể ping một địa chỉ: port , ví dụ: onofri.org:80 ?

Nếu tôi thử cái này thì nó không hoạt động:

miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80

Có thể ping một cái gì đó như địa chỉ: cổng ? Nếu có thể, tại sao tôi không thử làm việc?


8
Bạn đang cố gắng để thực hiện? Xác minh hoạt động dịch vụ chính xác yêu cầu bạn thực sự truy vấn dịch vụ và đánh giá phản hồi. Ví dụ, một máy chủ web có thể chấp nhận kết nối của bạn, nhưng trả về lỗi do cấu hình sai.
Daniel B

5
Đó là một phần của những gì tôi thích về Telnet. bạn có thể kết nối với máy chủ web và nhập GET /index.html HTTP\1.1và xem 200 phản hồi (hoặc mã lỗi) cùng với đánh dấu kết quả.
Frank Thomas

7
@FrankThomas HTTP\1.1? Có thật không?
glglgl

5
@Navin Có lẽ HTTP/1.1...
glglgl

3
@glglgl; gì? Bạn không bao giờ đặt một hack nơi một dấu gạch chéo nên đi? nhưng bạn đã đúng, nó nên là một dấu gạch chéo.
Frank Thomas

Câu trả lời:


20

Bạn có thể sử dụng Paping , thử nghiệm cổng TCP đa nền tảng, mô phỏng chức năng của ping (ping cổng)

(xem thêm Github vì code.google.com đã bị khấu hao)

paping -p 80 google.com

8
Một số giải thích về những gì chương trình này sẽ hữu ích.
David Schwartz

16
đối với bất kỳ ai tìm thấy câu trả lời này, như tôi đã làm, chỉ thấy paping không có trong bất kỳ kho lưu trữ nào và là mã cổ xưa thậm chí sẽ không được biên dịch trên ARM - cuộn xuống tiếp theo câu trả lời 'hping'. Đây là một trình bổ sung hoàn hảo cho ping khi bạn cần kiểm tra một cổng và có thể truy cập dễ dàng trong các kho khác nhau (ví dụ: Ubuntu, Arch) bao gồm ARM.
Đánh dấu

Làm thế nào tôi có thể cài đặt paping? Tôi đã truy cập repo nhưng không có bản phát hành. À, đừng bận tâm .. mã google không thể truy cập được vào lúc đó.
Shaya

310

Các cổng là một khái niệm về UDPTCP . Thông điệp Ping được gọi kỹ thuật là Yêu cầu Echo ICMPTrả lời Echo ICMP là một phần của ICMP . ICMP, TCP và UDP là "anh chị em"; chúng không dựa trên nhau, nhưng là ba giao thức riêng biệt chạy trên IP.

Vì vậy, bạn không thể pingmột cổng. Những gì bạn có thể làm, là sử dụng một máy quét cổng như thế nào nmap.

nmap -p 80 onofri.org

Bạn cũng có thể sử dụng telnet onofri.org 80, như được đề xuất trong một trong những câu trả lời khác (Nó sẽ báo lỗi nếu cổng bị đóng hoặc bị lọc).


22
+1 bạn hiểu đúng. ICMP được xây dựng trên đỉnh IP, có khái niệm địa chỉ IP nhưng không có cổng. TCP và UDP cũng nằm trên IP và đó là những giao thức có thêm "cổng". ICMP, TCP và UDP đều ở cùng một "cấp độ" về mặt giao thức mà chúng được mang theo.
Jason C

14
+1. Nhiều người nghĩ rằng nếu họ không thể ping thứ gì đó thì họ không thể kết nối với nó ... nhưng như bạn nói, ICMP khác với TCP và UDP: nếu bạn có ý định phục vụ, giả sử, một trang web trên TCP 80, ngoài việc bạn chỉ cần mở TCP 80 trên tường lửa, chẳng có gì khác (vì vậy Ping đến cùng một IP có thể (... nên!) bị chặn, chẳng hạn)
Olivier Dulac

6
Để giữ thông tin chính xác, ICMP không phải là giao thức lớp vận chuyển như TCP hoặc UDP. Giống như một số giao thức, nó không hoàn toàn phù hợp với các mô hình khái niệm mạng, nhưng nó thường được coi là giao thức lớp mạng / mạng nội bộ như IP. Đôi khi nó cũng được gọi là giao thức L3.5.
YLearn

2
@BenjiWiebe, đã đồng ý, nhưng một lần nữa, để chính xác, tuyên bố nên được đưa ra, đó là lý do tại sao tôi thêm nó. Tất cả những gì được nói cho đến nay là ICMP, TCP và UDP có liên quan. Các bình luận được bình chọn cao nhất thậm chí còn đi xa đến mức nói rằng tất cả đều ở cùng một "cấp độ". Mặc dù điều này không tạo ra sự khác biệt đối với người dùng trung bình, nhưng có rất nhiều người dùng không trung bình truy cập trang web này.
YLearn

4
@OlivierDulac Tôi không biết liệu bạn có nên chặn nó không. Hầu hết các máy chủ web tôi biết đều để nó mở. ICMP làm cho internet đi khắp nơi. Tại sao bạn muốn mọi người nghĩ rằng họ không thể tiếp cận bạn nếu họ có thể?
Cruncher

86

Tôi sử dụng Telnet , vì nó được tích hợp vào rất nhiều nền tảng mà không cần tải thêm.

Chỉ cần sử dụng lệnh telnet để kết nối với cổng bạn muốn kiểm tra. Nếu bạn nhận được thông báo bên dưới hoặc tin nhắn từ chính dịch vụ thì cổng vẫn còn hoạt động.

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Nếu bạn biết chuỗi lệnh cho dịch vụ bạn đang kết nối, bạn có thể nhập lệnh ( ví dụ HTTP / FTP GET ) và quan sát phản hồi và đầu ra trong thiết bị đầu cuối. Điều này rất hữu ích để tự kiểm tra dịch vụ, vì nó sẽ hiển thị cho bạn thông tin lỗi được gửi đến máy khách, như lỗi HTTP 500.

Nếu bạn nhận được thông báo rằng kết nối bị từ chối, cổng sẽ bị đóng.

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

8
Ngoài ra nếu màn hình chuyển sang màu đen hoàn toàn thì đó cũng là dấu hiệu bạn đã kết nối.
Hàng chục

Đề nghị tuyệt vời. Tôi đã từng sử dụng điều này để kiểm tra xem máy chủ web có hoạt động không khi trình duyệt web không phải là một lựa chọn dễ dàng.
Brandon

@Brandon thích khi sshing vào máy dev ^. ^
Cruncher

Các công cụ dành cho nhà phát triển trong trình duyệt dễ dàng hơn nhiều vì họ vẫn sẽ gửi tất cả các tiêu đề yêu cầu HTTP phù hợp nhưng bạn có thể kiểm tra phản hồi HTTP đầy đủ. Sau đó, một lần nữa nếu bạn muốn điều chỉnh yêu cầu thì telnet là cách để đi.
Các cuộc đua nhẹ nhàng trong quỹ đạo

Tôi nghĩ rằng tất cả các câu trả lời ở đây bỏ lỡ phần thông tin quan trọng nhất. Về mặt kỹ thuật, liệu có thể "ping" một cổng như sau không? Bạn có thể thiết lập kết nối TCP / UDP và bạn đếm xem cần bao nhiêu mili giây để thiết lập kết nối đó.
David

47

Có, sử dụng HPing để làm điều đó:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

Lưu ý rằng nó cần các đặc quyền gốc (hoặc khả năng SELinux) để tạo các gói IP thô, giống như ping (rất có thể là suid trên hệ thống của bạn).


3
Tôi muốn đây là "câu trả lời được chấp nhận". Hping có thể dễ dàng tìm thấy trong nhiều repos, không giống như paping là mã thô sơ cổ xưa không được biên dịch trên ARM. Cũng không giống như NMAP, haping trả về mã trạng thái có thể dễ dàng kiểm tra từ tập lệnh shell, do đó, nó là một sự thay thế hoàn hảo cho nơi bạn sẽ sử dụng ping. Cảm ơn câu trả lời này, một sự xấu hổ tôi đã không cuộn xuống đủ xa để nhìn thấy nó và phải tìm nó trên một trang web khác thay thế.
Đánh dấu

Tôi không thể cài đặt hping trong ubfox .. Không tìm thấy gói .. Nhưng tôi đã tìm thấy hping3. Nó có giống như hping3không? @ d33tah
Shayan

Ok tôi đã thử hping3và nó ping tất cả các cổng .. Không quan trọng đóng hay mở .. Làm thế nào tôi có thể biết nếu một cổng được đóng hoặc mở?
Shaya

46

Bạn có thể sử dụng netcat để kết nối với một cổng cụ thể để xem bạn có kết nối không. Cờ -v sẽ tăng mức độ chi tiết để hiển thị cổng được mở hay đóng. Cờ -z sẽ khiến netcat thoát khi có kết nối. Sau đó, bạn có thể sử dụng mã thoát thông qua $? để xem liệu kết nối có được thiết lập hay không.

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

Ngoài ra, bạn có thể sử dụng mtr với cờ -T cho tcp và cờ -P để chỉ định một cổng. Điều này sẽ làm một cái gì đó tương tự như một traceroute qua TCP thay vì chỉ ICMP. Điều này có thể là quá mức cần thiết, tuy nhiên.

tiếng thở dài tôi phải chỉnh sửa thêm chút này, vì chúng ta không thể đặt mã trong ý kiến. Knoppix có thể đang làm một cái gì đó khác với phiên bản netcat của nó, nhưng đây là những gì tôi nhận được từ Linux Mint

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]

vấn đề là nếu bạn thử nc -z www.google.com 8000 nó có thể mất nhiều thời gian - 5 giây cộng thêm. Nếu tôi làm -w 1thì phải mất 5 giây. Nếu tôi làm như vậy -w 3thì sẽ mất gấp 3 lần nữa .. 15 lần nhấp nháy của con trỏ, 15 giây. -w 1có nghĩa là một giây nhưng được thử nghiệm trên cygwin.,. 5 giây. Tốc độ cực nhanh khi có máy chủ trên cổng nhưng hơi chậm khi không có.
barlop

nguyền rủa không có dòng mới trong các bình luận ... Đó dường như là một lỗi với cygwin. Thử nghiệm với linux Mint cho thấy độ trễ tuy nhiên nhiều giây được chỉ định. đã chạy thử nghiệm này: date; nc-zw5 www.google.com 8000; date
Falsenames

Tôi cũng đã nâng cấp @BenjiWiebe với các yêu cầu nmap. nc dễ dàng hơn để đưa vào một tập lệnh, nhưng nó dễ dàng hơn để sử dụng nmap một cách trực quan.
Falsenames

Đang thử nó trong knoppix. nc -zv -w 1 www.google.com Làm thế nào để bạn chỉ thử một lần? Khi tôi thử, có -w 1 hoạt động nhưng mỗi giây nó sẽ thử lại cho đến khi tôi thực hiện Ctrl-C.
barlop

Không chắc chắn phiên bản Knoppix của 'nc -zv -w 1 www.google.com 80' đang làm gì. Điều đó hoạt động tốt trên hệ thống của tôi, truy vấn một lần và thả giống như -z là phải làm. Ngoài ra, không có số cổng được chỉ định, tôi không nói rằng không có cổng được chỉ định.
Falsenames

18

Bạn cũng có thể sử dụng nping(một phần của nmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds

6
nping --tcp -p 80 localhost
K-Gun

Tôi kiểm tra BẤT K port cổng nào, (các cổng không mở) và tôi vẫn nhận được hai cái bắt tay mọi lúc ...
Shaya

8

Bạn có thể thực hiện điều này trong shell với Python như một lớp lót không quá ngắn:

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSED; }
$ portping 8.8.8.8 54
CLOSED
$ portping 8.8.8.8 53
OPEN

7

Chỉ để tham khảo, muốn chia sẻ một bài đăng của Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-USE-linux-unix/# bình luận-920398

Ông liệt kê nhiều cách khác nhau, một số trong đó đã được đăng ở đây. Nhưng điều đáng ngạc nhiên nhất đối với tôi không gì khác ngoài bash:

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

Hoặc một phiên bản siêu đơn giản: chỉ cần nhìn vào đầu ra của mẫu lệnh sau:

echo >/dev/{tcp|udp}/{host}/{port}

Hữu ích khi làm việc với các container docker ngẫu nhiên.


looking at the output- chỉ kiểm tra mã trả lại $?có thể hữu ích. Ngoài ra, nó bị treo trên các cổng đóng, có thể một số thời gian chờ có thể được cấu hình ở bất cứ đâu ...
vp_arth

Giải pháp này có vẻ gọn gàng, nhưng echo >/dev/tcp/{hostname}/{portnumber}không kết thúc khi cổng được đóng lại. Và echo >/dev/tcp/{hostname}/{portnumber}không hiển thị gì mặc dù cổng đã mở và tôi có thể thấy nó trên trình duyệt.
Miguelmorin

Xin chào mmorin, bạn sử dụng hệ điều hành nào? Trên Ubuntu, nó hoạt động như mong đợi: nếu cổng được đóng, tôi nhận được Connection refused. Mặt khác, nó không hiển thị gì và echo $?hiển thị mã thoát1
Jacek

3

Tôi thêm watchcông cụ ở đây:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com   Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT     STATE  SERVICE
22/tcp open   ssh
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds

3

Nó đơn giản với nmap

ví dụ:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

Để biết thêm thông tin xem điều này:

gõ vào dòng lệnh này: man nmap

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/


1

Bạn đang thử kiểm tra giao tiếp hoặc nhận phản hồi từ cổng 80 trên nút đó? PINGsẽ cố gắng thiết lập liên lạc đến một máy chủ cụ thể thông qua ICMP không liên quan gì đến các cổng.

Thay vào đó hãy thử http://nmap.org/ để kiểm tra thông tin cổng và kiểm tra giao tiếp:

nmap -v -p 80 onofri.org

1
Không chắc chắn phiên bản nmap nào bạn đang sử dụng. Trên hệ thống của tôi, nó yêu cầu -v và -p phải được tách ra như 'nmap -v -p 80 onofri.org'. Điều này là do -v và -vv có nghĩa là những thứ khác nhau, -v lấy nhiều v hơn làm đối số.
Falsenames
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.