periksa port terbuka tanpa telnet [tertutup]

17

Apa yang digunakan orang ketika Telnet tidak diinstal untuk memeriksa port terbuka dan dapat dijangkau? Misalnya saya dulu menggunakan teknik telnet <destination>dan tahu itu ada di sana, bahkan jika telnet tidak dapat berinteraksi dengan sistem di ujung lainnya.

Dengan Windows 2008, telnet tidak diinstal jadi saya agak bingung. Jadi apa yang bisa saya gunakan sebagai gantinya. Dan sesuatu jika tidak ada di Linux atau Solaris, silakan juga.

Saya seorang konsultan yang bekerja di situs yang berbeda. Untuk sejumlah alasan (hak akses, ubah waktu kontrol, jika saya menginstalnya seseorang menggunakannya tahun depan kami memiliki beberapa tanggung jawab, dll) Saya tidak dapat menginstal pada server orang lain. Tetapi USB atau alat lain yang lengkap dan tidak terpasang akan sangat bagus ...

Karl
sumber
3
Mengapa Anda tidak menginstalnya saja?
Chris McKeown
Atau instal sesuatu seperti nmap...
etagenklo
Coba gunakan nmap
Zeeshan

Jawaban:

25

Gunakan Powershell seperti bos


Kode dasar

$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"
}

Ubah menjadi cmdlet

[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"
}

Simpan sebagai skrip dan gunakan sepanjang waktu

Kemudian Anda menggunakan perintah di PowerShell atau cmd prompt Anda seperti:

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

atau

PS C:\> telnet.ps1 8.8.8.8 53

Vasili Syrakis
sumber
4
Anda juga dapat menjalankan: New-Object System.Net.Sockets.TcpClient ("IP atau DomainName", 80) Dan Anda akan mendapatkan kesalahan jika tidak dapat terhubung, atau informasi tentang objek yang dibuat jika koneksi berhasil.
Tsuushin
1
Bagaimana cara kerjanya dalam hal menutup soket? Misalnya saya tahu jika saya membuka permintaan web untuk IIS, tetapi jangan menutup koneksi, itu akan mencapai batas dan saya tidak akan dapat menguji lagi.
Vasili Syrakis
Pertanyaan bagus. Saya membayangkan itu melakukan hal yang sama seperti dalam jawaban Anda (karena Anda / kami tidak membuangnya atau menutup soket secara manual); TcpClient harus mengumpulkan sampah di beberapa titik, atau soket akan mencapai batas waktu baca sebelum itu. Tebakan saja, belum mengujinya!
Tsuushin
1
Jika Anda tidak ingin khawatir tentang membiarkan soket terbuka untuk sementara waktu, Anda dapat melakukan ini: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Tutup transaksi yang sama seperti sebelumnya; Kesalahan jika Anda tidak dapat terhubung, tetapi akan mencetak ini jika terhubung kemudian berhasil menutup port: void Close ()
Tsuushin
41

Berikut adalah beberapa cara berbeda untuk menguji port TCP tanpa telnet.

BASH ( halaman manual )

# 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


ikal

# 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


Python

# 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
skohrs
sumber
+1 Tidak mengetahui metode keriting, sangat keren! :)
blong