çalıştıran:Denetleme ve ben biraz damıtılmış zaman, şöyle bir perl script var
my $randport = int(10000 + rand(1000)); # Random port as other scripts like this run at the same time
my $localip = '192.168.100.' . ($port - 4000); # Don't ask... backwards compatibility
system("ssh -NL $randport:$localip:23 root\@$ip -o ConnectTimeout=60 -i somekey &"); # create the tunnel in the background
sleep 10; # Give the tunnel some time to come up
# Create the telnet object
my $telnet = new Net::Telnet(
Timeout => 10,
Host => 'localhost',
Port => $randport,
Telnetmode => 0,
Errmode => \&fail,
);
# SNIPPED... a bunch of parsing data from $telnet
şey hedef $ ip çok öngörülemeyen bir linke olmasıdır bant genişliği, bu yüzden tünel hemen ortaya çıkabilir, bir süre alabilir, hiç ortaya çıkmayabilir. Bu yüzden tünele bir süre kalkmak ve koşmak için bir uyku şarttır.
Yani soru şu: Nasıl tünel ve çalışır olup olmadığını test edebilirsiniz? Tünel hemen çıkarsa 10 saniye gerçekten istenmeyen bir geciktir. İdeal olarak, ben 30 saniye, diyelim ki, en fazla, o kadar olmadığını kontrol ve bir kez Telnet nesnesi oluşturma ile devam etmek istiyorum.Düzenleme: ucu lerden yola çıkılarak mikebabcock önerdiği: Ping ama
çözüldü packetloss çok yüksek miktarda, tünelin uzak ucu yukarı genellikle olduğu gibi benim mouch yardımcı olmuyor , sleep 10
bir cazibe gibi çalışır bu blokta ile değiştirilmiştir: eğer ssh sunucusuna bir ping entegre edebilirsiniz
my $starttime = time();
while (1)
{
# Check for success
if (system("nc -dzw10 localhost $randport > /dev/null") == 0) { last }
# Check for timeout
if (time() > $starttime + 30) { &fail() }
# 250ms delay before recheck
select (undef, undef, undef, 0.25);
}
pes et "Net :: Telnet" modülünü kullandığınızdan, "açık" aramayı denediniz mi ve başarı için test mi yaptınız? Telnet uzmanı değilim, ama muhtemelen ben olsaydım denerdim. –
Test yapmanın basit bir yolu yoksa bunu yapabilirim: time_spend_trying <30 saniye – Jarmund