Meu discurso de telnet
Em geral, aconselho que você não use telnet
, mas use ssh
. O Telnet é um passivo de segurança que ninguém deveria estar usando neste dia e idade. Veja este artigo para uma demonstração de como alguém pode facilmente farejar pacotes telnet ao atravessar a rede usando wireshark e obter acesso às suas credenciais. O artigo é intitulado: Farejando o Telnet usando o Wireshark . Aqui está uma captura de tela de uma tentativa de login usando o telnet:
Corrigindoseuproblema
Noentanto,sevocêtiverqueusarabsolutamentetelnet
,eucomeçareidiagnosticandoocomandotelnet
quevocêestáusandocomaferramenta,strace
.
Exemplo
Parademonstraroproblemaquevocêestáenfrentando,modifiqueimeuarquivo/etc/resolv.conf
paraquehouvesseumservidorDNSfalsonamistura.IssocausariaalentidãoqueoOPestavaexperimentandonofinaldascontas.
#/etc/resolv.conf#GeneratedbyNetworkManagerdomainmydom.net.searchmydom.net.nameserver1.2.3.4nameserver192.168.1.101
Euentãoexecuteitelnet
daseguinteforma:
$strace-Ttelnetskinner
Estaseçãodasaídamostraoqueestádemorandotanto:
...socket(PF_INET,SOCK_DGRAM|SOCK_NONBLOCK,IPPROTO_IP)=3<0.000021>connect(3,{sa_family=AF_INET,sin_port=htons(53),sin_addr=inet_addr("1.2.3.4")}, 16) = 0 <0.000023>
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}]) <0.000012>
sendto(3, "5N$ time telnet skinner
Trying 192.168.1.3...
telnet: connect to address 192.168.1.3: Connection refused
real 0m10.030s
user 0m0.001s
sys 0m0.003s
$ strace -T telnet skinner
...
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.101")}, 16) = 0 <0.000018>
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}]) <0.000010>
sendto(3, "D3$ time telnet skinner
Trying 192.168.1.3...
telnet: connect to address 192.168.1.3: Connection refused
real 0m0.009s
user 0m0.000s
sys 0m0.002s
# /etc/resolv.conf
# Generated by NetworkManager
domain mydom.net.
search mydom.net.
nameserver 1.2.3.4
nameserver 192.168.1.101
$ strace -T telnet skinner
...
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3 <0.000021>
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("1.2.3.4")}, 16) = 0 <0.000023>
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}]) <0.000012>
sendto(3, "5N$ time telnet skinner
Trying 192.168.1.3...
telnet: connect to address 192.168.1.3: Connection refused
real 0m10.030s
user 0m0.001s
sys 0m0.003s
$ strace -T telnet skinner
...
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.101")}, 16) = 0 <0.000018>
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}]) <0.000010>
sendto(3, "D3$ time telnet skinner
Trying 192.168.1.3...
telnet: connect to address 192.168.1.3: Connection refused
real 0m0.009s
user 0m0.000s
sys 0m0.002s
%pre%%pre%%pre%%pre%%pre%%pre%%pre%grinchymydomnet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000054>
poll([{fd=3, events=POLLIN|POLLOUT}], 1, 5000) = 1 ([{fd=3, revents=POLLOUT}]) <0.000009>
sendto(3, "s2%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%grinchymydomnet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000021>
poll([{fd=3, events=POLLIN}], 1, 4999) = 1 ([{fd=3, revents=POLLIN}]) <0.005300>
ioctl(3, FIONREAD, [84]) = 0 <0.000024>
recvfrom(3, "D350%pre%%pre%%pre%%pre%grinchymydomnet%pre%%pre%"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.101")}, [16]) = 84 <0.000016>
poll([{fd=3, events=POLLIN}], 1, 4994) = 1 ([{fd=3, revents=POLLIN}]) <0.003688>
...
%pre%%pre%%pre%%pre%%pre%%pre%grinchybubbanet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000073>
poll([{fd=3, events=POLLIN|POLLOUT}], 1, 5000) = 1 ([{fd=3, revents=POLLOUT}]) <0.000012>
sendto(3, "32%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%grinchybubbanet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000027>
poll([{fd=3, events=POLLIN}], 1, 4999) = 0 (Timeout) <5.004038>
...
%pre%%pre%%pre%%pre%grinchymydomnet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000054>
poll([{fd=3, events=POLLIN|POLLOUT}], 1, 5000) = 1 ([{fd=3, revents=POLLOUT}]) <0.000009>
sendto(3, "s2%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%grinchymydomnet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000021>
poll([{fd=3, events=POLLIN}], 1, 4999) = 1 ([{fd=3, revents=POLLIN}]) <0.005300>
ioctl(3, FIONREAD, [84]) = 0 <0.000024>
recvfrom(3, "D350%pre%%pre%%pre%%pre%grinchymydomnet%pre%%pre%"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.101")}, [16]) = 84 <0.000016>
poll([{fd=3, events=POLLIN}], 1, 4994) = 1 ([{fd=3, revents=POLLIN}]) <0.003688>
...
%pre%%pre%%pre%%pre%%pre%%pre%grinchybubbanet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000073>
poll([{fd=3, events=POLLIN|POLLOUT}], 1, 5000) = 1 ([{fd=3, revents=POLLOUT}]) <0.000012>
sendto(3, "32%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%grinchybubbanet%pre%%pre%"..., 35, MSG_NOSIGNAL, NULL, 0) = 35 <0.000027>
poll([{fd=3, events=POLLIN}], 1, 4999) = 0 (Timeout) <5.004038>
...
O poll
acima que experimentou o "Tempo Limite" foi nossa consulta DNS para o servidor 1.2.3.4 na porta 53. Podemos ver quando usamos a opção -T
, que essa chamada de uma função levou ~ 5 segundos até esgotado.
Também podemos confirmar o período de tempo usando o comando time
da seguinte forma:
Usando um servidor DNS correto
Colocar um servidor DNS correto em /etc/resolv.conf
e telnet
agora tem muito mais desempenho.
O sincronismo usando time
também mostra o mesmo: