kiểm tra cổng mở mà không có telnet [đã đóng]


17

Mọi người sử dụng gì khi Telnet chưa được cài đặt để kiểm tra một cổng có mở và có thể truy cập không? Ví dụ, tôi đã từng sử dụng kỹ thuật telnet <destination>và biết nó ở đó, ngay cả khi telnet không thể tương tác với hệ thống ở đầu bên kia.

Với Windows 2008 telnet chưa được cài đặt nên tôi đã bị mất một chút. Vì vậy, những gì tôi có thể sử dụng thay thế. Và một cái gì đó nếu nó không có trong Linux hoặc Solaris, xin vui lòng.

Tôi là một nhà tư vấn làm việc trên các trang web khác nhau. Vì một số lý do (quyền truy cập, thay đổi thời gian kiểm soát, nếu tôi cài đặt thì ai đó sẽ sử dụng nó vào năm tới, chúng tôi có một số trách nhiệm, v.v.) Tôi không thể cài đặt trên máy chủ của người khác. Nhưng một USB hoặc công cụ không cài đặt, khép kín khác sẽ rất tuyệt ...


3
Tại sao bạn không cài đặt nó?
Chris McKeown

Hoặc cài đặt một cái gì đó như nmap...
etagenklo

Hãy thử sử dụng nmap
Zeeshan


Câu trả lời:


25

Sử dụng Powershell như một ông chủ


Mã cơ bản

$ipaddress = "4.2.2.1"
$port = 53
$connection = New-Object System.Net.Sockets.TcpClient($ipaddress, $port)

if ($connection.Connected) {
    Write-Host "Success"
}
else {
    Write-Host "Failed"
}

Biến nó thành một lệnh ghép ngắn

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$ip,

   [Parameter(Mandatory=$True,Position=2)]
   [int]$port
)

$connection = New-Object System.Net.Sockets.TcpClient($ip, $port)
if ($connection.Connected) {
    Return "Connection Success"
}
else {
    Return "Connection Failed"
}

Lưu dưới dạng tập lệnh và sử dụng mọi lúc

Sau đó, bạn sử dụng lệnh trong dấu nhắc powershell hoặc cmd của bạn như vậy:

PS C:\> telnet.ps1 -ip 8.8.8.8 -port 53

hoặc là

PS C:\> telnet.ps1 8.8.8.8 53


4
Bạn cũng có thể thực thi: New-Object System.Net.Sockets.TcpClient ("IP hoặc DomainName", 80) Và bạn sẽ gặp lỗi nếu không thể kết nối hoặc thông tin về đối tượng được tạo nếu kết nối thành công.
Tsuushin

1
Làm thế nào mà làm việc về mặt đóng ổ cắm? Ví dụ: tôi biết nếu tôi mở một webrequest cho IIS, nhưng không đóng kết nối, nó sẽ đạt đến giới hạn và tôi sẽ không thể kiểm tra được nữa.
Vasili Syrakis

Câu hỏi hay. Tôi tưởng tượng nó làm điều tương tự như trong câu trả lời của bạn (vì bạn / chúng tôi không vứt bỏ nó hoặc đóng ổ cắm bằng tay); TcpClient sẽ nhận được rác được thu thập tại một số điểm hoặc ổ cắm sẽ đạt thời gian chờ đọc trước đó. Chỉ là một phỏng đoán, đã không kiểm tra nó!
Tsuushin

1
Nếu bạn không muốn lo lắng về việc mở ổ cắm trong một thời gian, bạn có thể làm điều này: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Đóng Tương tự như trước; Lỗi nếu bạn không thể kết nối, nhưng nó sẽ in ra nếu nó được kết nối rồi đóng cổng thành công: void Đóng ()
Tsuushin

41

Dưới đây là một số cách khác nhau để kiểm tra cổng TCP mà không cần telnet.

BASH ( trang nam )

# cat < /dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_5.3
^C

# cat < /dev/tcp/127.0.0.1/23
bash: connect: Connection refused
bash: /dev/tcp/127.0.0.1/23: Connection refused


Xoăn

# curl -v telnet://127.0.0.1:22
* About to connect() to 127.0.0.1 port 22 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 22 (#0)
SSH-2.0-OpenSSH_5.3
^C

# curl -v telnet://127.0.0.1:23
* About to connect() to 127.0.0.1 port 23 (#0)
*   Trying 127.0.0.1... Connection refused
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host


Con trăn

# python
Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> clientsocket.connect(('127.0.0.1', 22))
>>> clientsocket.send('\n')
1
>>> clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> clientsocket.connect(('127.0.0.1', 23))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused


Perl

# perl
use IO::Socket::INET;
$| = 1;
my $socket = new IO::Socket::INET(
  PeerHost => '127.0.0.1',
  PeerPort => '22',
  Proto => 'tcp',
);
die "cannot connect to the server $!\n" unless $socket;
print "connected to the server\n";
^D
connected to the server

+1 Không biết phương pháp uốn tóc, rất tuyệt! :)
blong
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.