コンピューターがインターネットに接続されているかどうかを確認します


49

スクリプトがインターネットにアクセスできるかどうかに応じて、「Truthy / Falsey」という出力を生成するプログラムを作成します。ご自身の裁量で既存のサイトに接続してみてください(10%の稼働率しかない日陰のサイトは使用しないでください -年間稼働率80%を超えないようにしてください)。サイトがダウンしている場合、プログラムは機能する必要ありませ

スタンドアロンプ​​ログラムまたは関数でなければなりません。これを実現するために、標準ライブラリ以外のライブラリを使用できます。標準的な抜け穴は禁止されています。これはコードゴルフなので、バイトカウントが最も短いコードが優先されます。

擬似コードの例:

function a:
    try:
        connect to internet 
        return 1
    catch error:
        return 0

これはコードゴルフに関する私の最初の投稿なので、これが何らかの規則に違反するか、またはだまされている場合、私に警告してください。

編集:多数の提案のため、UTF-8バイトカウント制限を削除しました


4
trueおよびの代わりに、真実性と虚偽のデフォルトをfalse許可することをお勧めします。また、インターネットとは、ローカルネットワーク外のネットワークを意味しますか?Googleがダウンしている、または他の大規模なサイトがある場合、プログラムはまだ動作する必要がありますか?
ブルー

3
バイトカウントは通常、言語のネイティブまたは最も便利なエンコーディングで行われますが、これは常にUTF-8ではありません。あなたUTF-8を強制するために十分な理由がない限り、私は、エンコーディングは、プログラマの選択に委ねられるべきだと思う
ルイスMendo

4
ほとんどの人がg.gl/http://g.gl/を使用しているようですが、to./http://to./は1バイト短くなっているようです(すべての言語が有効なURLとして認識しているわけではありません)。
ケビンCruijssen

9
コモドールベーシック:PRINT "0"
マーク

3
私がこれを入力しているまさにそのマシンは、技術的には「インターネット」の一部です。外部から(NATおよびポート転送を介して)アクセスできるからです。したがって、考えてみると、「インターネット検出」スクリプトはおそらく「true」に減らすことができます:)
zeppelin

回答:


29

Bash(dnsutilsを使用)、3バイト

「。」のDNS要求を送信します (DNSルート)、成功の場合は終了コードは0、それ以外の場合は> 0です。

ゴルフ

dig

テスト

% dig >/dev/null; echo $?;        
0

% nmcli nm wifi off
% dig >/dev/null; echo $?;
9

免責事項

これは、DNSサーバーがプロバイダーのネットワーク、つまり「インターネット」にある場合(プロバイダーネットワークは通常その一部であるため)、またはシステムがパブリックDNSサーバー(8.8.8.8など)を使用している場合にのみ機能します。 Androidベースのシステムが使用するGoogleから)、そうでない場合は、ローカルLANサーバー(またはローカルホスト)からキャッシュされたコピーを取得できます。

しかし、これはルールに反するものではないと思います。これは明らかに、意図したとおりに機能するシステムが複数あるためです。

Pure-HTTPメソッドは、中間キャッシングプロキシにより誤検知を引き起こす可能性があり、どこでも機能することが保証されていないため、このメソッドに固有のものではありません。

わずかに信頼性の高いバージョン、8バイト

dig +tra

(@ Dig ital Tra uma へのオマージュ!)

「トレースモード」を有効にします。これにより、digが自動的に再帰検索を実行し(https://serverfault.com/a/778830を参照)、キャッシュの問題が回避されます。


引用元man dig:特定のネームサーバーを照会するように指示されない限り、digは/etc/resolv.confにリストされている各サーバーを試行します。使用可能なサーバーアドレスが見つからない場合、digはクエリをローカルホストに送信します。
タイタス

@Titus、そうですね、私の答えの「免責事項」の部分を参照してください。ただし、DNSサーバー(resolv.confで指定されている)がプロバイダー側​​にある限り、うまく機能します。
ツェッペリン

ソリューションは、デフォルト以外のインストールに依存しています。私は抜け穴を悪用すると考えています。2バイトを追加しても勝つことができます。
タイタス

1
>あなたの解決策は、デフォルト以外のインストールに依存します。いいえ、それはまさに私のマシンでの動作方法です(そして、Metaによればそれですでに十分です)。さらに、プロバイダーのDNSサーバーを使用するのは、かなり一般的な設定です(通常、resolv.confにもあります)。
ツェッペリン

2
defualt settignsは、DHCPを使用してネットワークを構成し、おそらくresolv.confがルーターを指す場合、インストール時に使用した設定に依存します。手動でネットワークを構成した場合、指定したDNSサーバーが含まれます。
ジェイセン

19

Bash + GNU utils、8

  • @Muzerのおかげで5バイト節約されました。
wget to.

他のシェルの応答は戻りコードを確認し、それに応じていくつかのステータス出力をエコーし​​ます。これは不要です。シェルの戻りコードはすでに使用可能なTruthy / Falseyコードであり$?、bashの慣用的なパラメーターでアクセスできます。戻りコード0はTrueを意味します。戻りコード> 0はFalseを意味します。

使用中で:

ubuntu@ubuntu:~$ wget to.
--2017-01-13 09:10:51--  http://to./
Resolving to. (to.)... 216.74.32.107, 216.74.32.107
Connecting to to. (to.)|216.74.32.107|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11510 (11K) [text/html]
Saving to: index.html.6

index.html.6        100%[===================>]  11.24K  --.-KB/s    in 0.04s   

2017-01-13 09:10:51 (285 KB/s) - index.html.6 saved [11510/11510]

ubuntu@ubuntu:~$ echo $?
0
ubuntu@ubuntu:~$ sudo ifconfig ens33 down
ubuntu@ubuntu:~$ wget to.
--2017-01-13 09:11:00--  http://to./
Resolving to. (to.)... failed: Temporary failure in name resolution.
wget: unable to resolve host address to.’
ubuntu@ubuntu:~$ echo $?
4
ubuntu@ubuntu:~$ sudo ifconfig ens33 up
ubuntu@ubuntu:~$ # Local network up, upstream link down
ubuntu@ubuntu:~$ wget to.
--2017-01-13 09:11:34--  http://to./
Resolving to. (to.)... failed: Name or service not known.
wget: unable to resolve host address to.’
ubuntu@ubuntu:~$ echo $?
4
ubuntu@ubuntu:~$ 

2
かなり多くを節約するために、to.ではなく、のようなドメインを使用してください8.8.8.8
ミュザー

@Muzerはい-ありがとう
デジタル外傷

2
@Muzerローカルがない限りto、リゾルバは見つけるように構成されていることが、それはまだ右のいずれかに行く(そしておそらくローカルにpingを実行することができるということになるtoのに十分であるインターネットに接続されている
クリスチャンのSievers

2
@Muzer OK、to時には機能する場合とそうでない場合があります。いくつかのキャッシュが進行していると思います。to.安全のためだけに使用します。
デジタル外傷

4
なぜそれが有効なドメインなのですか?
コス

9

バッチ、8バイト

ping to.

pingアドレスが解決できないか到達できない場合に設定さERRORLEVEL1ます。


7

05AB1E11 9バイト

「to」に2バイトを保存しました。ev3commanderの礼儀

…to..wgX›

http:// toにあるコンテンツの長さをチェックます。1より大きい場合
.w、エラー時に0を返します。


1
05AB1Eの回答に対して常に+1
WorseDoughnut

@WorseDoughnutそして、それはなぜですか?
mbomb007

3
@ mbomb007 Adnanが作業を開始してここに投稿して以来、この言語の大ファンでした。それは間違いなく魅力的な言語です。
WorseDoughnut

1
@WorseDoughnut答えにはすでにハイパーリンクがあります。
mbomb007

に接続できませんバイトを保存するには?
ev3commander

5

MATL15 14バイト

Kevin Cruijssenの提案のおかげで1バイト節約

'http://to.'Xi

出力はSTDOUT経由です。これは、インターネット接続がある場合、ゼロ以外の文字を含む空ではない文字列を表示します(これは真実です)。接続がない場合は何も表示されません(偽です)。

これXiはオンライン通訳では許可されていないため、オンラインでテストすることはできません。

説明

'http://to.'  % Push this string
Xi            % Return contents of that URL as a string. If there is no Internet
              % connection this gives an error, with no output on STDOUT

それurlread('http://g.gl')自体でOKの答えになると思いますか?接続がダウンすると、エラーが発生し、ワークスペースが空のままになります。エラーメッセージが表示されますが、技術的にはSTDERR ...?私はそれが少しストレッチだと思ったので、私はこのようにした。しかし、スキップするtryとコードと同じ結果が得られるようですか?スタックも空のままにしますか?... :)経由でニースの答え
Stewieグリフィン

@StewieGriffinありがとう!はい、urlread('http://g.gl')STDERRはデフォルトで無視され、MATLABで空のSTDOUTは偽であるため、有効である(私のコードと同じです)
Luis Mendo

1
これはftp代わりに動作しhttpますか?
フローリス

1
@Florisまたここでお会いできてうれしいです!残念ながら、ftpdoesnの者は、そのサイトのために仕事に思える
ルイスMendo

1
こんにちは、@ LuisMendoはい、私は時々他のサイトをうろついています... ftpが機能しません
フローリス

5

Bash 66 62 21バイト

ping -c1 g.gl echo $?

@Alex L.にURL短縮のヒントをありがとう。

ゴルフされていないバージョン:

r=$(ping -c1 g.gl)
if [ $? -ne 0 ];
 then echo "0"
else echo "1"
fi

これはBashでの最初の回答です。スクリプトを十分に短くしたかどうかはわかりません。


google.comよりも短いURLを使用するとコードを短縮できると思います。g.glのようなもの。
ハイパーニュートリノ

3
またecho $?、if文全体の代わりにできるようにする必要があります。
-SomethingDark

4
;ゴルフラインの「一部」を見逃した。
Iporサーサー

@IporSircerありがとう。:) @SomethingDarkこんにちは、ifの成功をecho $? 出力する02、この場合はを返します。の実装のソースコードは調べていませんがping、状況によって異なるリターンコードがあると思われます。したがって、私はif else戦略を使用しました。
アベルトム

@AbelTom-0は真実であり、0以外は偽であると主張できます。
-SomethingDark

5

R、20バイト

curl::has_internet()

curlパッケージには、まさにこのタスクのための関数があります。


1
+1素敵な検索。私のような好奇心の強い人のために、この機能は次のように実装されていますfunction() !is.null(nslookup("r-project.org", error = FALSE))
。– plannapus

同等のカウント:(httr::url_ok('g.gl')推奨されていませんが)。
ジョナサンキャロル

5

Java、72バイト

a->new java.net.InetSocketAddress("to.",80).getAddress().isReachable(9);

3
完全修飾名java.net.InetSocketAddress

4

Perl、15バイト

print`curl to.`

で実行:

perl -e 'print`curl to.`' 2> /dev/null

curlものを出力しますがSTDERR、気にしないでください。コンピューターがインターネットにアクセスできる場合は、数行のhtmlを印刷します(真実)。それ以外の場合は、何も印刷しません(偽)。

@Kevin Cruijssenのおかげto.で(以前のの代わりにb.io)を使用して1バイトを節約しました。


bashに切り替えて削除できませんでしたprintか?
BlueRaja-ダニーPflughoeft

1
@ BlueRaja-DannyPflughoeft Yup、それは機能します(bashには既に回答があります(wget代わりに使用しますcurlが、同じことです))。
ダダ

4

C#、87バイト

_=>{try{new System.Net.WebClient().OpenRead("http://g.gl");return 1;}catch{return 0;}};

例外が偽と考えられている場合、それはそうではないと思いますが、これは65バイトです:

_=>new System.Net.WebClient().OpenRead("http://g.gl").ReadByte();

またhttp://to.、@ KevinCruijssenが述べたリンクを使用してみましたが、うまくいかないようでした。


4

8番目23 21バイト

Kevin Cruijssenの提案と私の発見おかげで、2バイト節約できましたhttp:// toも同様に動作するようですhttp:// to。(別のバイトを保存する)

"http://to" net:get .

サイトhttp:// toにアクセスできる場合、印刷されtrueます。それ以外の場合は印刷されfalseます。取得したデータをスタックに残します。


1
TOSは、意味のT OP O、F 、Sタック。スタックにデータを残すだけだと思います。
ローマングラフ

そのとおり。説明を改善しました。ありがとう。
カオスマナー

@ ev3commander http:// toで試しましたか?私の場合はうまくいきます(Apache2 Ubuntuデフォルトページが表示されます)。「。」を追加する必要はないようです。または '/'
カオスマナー

3

MATLAB、32 22バイト

urlread('http://g.gl')

説明:

インターネット接続が確立している場合、これにより、ans(デフォルト変数)htmlテキスト全体がプレーンテキスト(MATLABではtrue)の文字列になります。

インターネット接続がダウンしている場合、これはエラーメッセージをSTDERRに書き込み、ワークスペースを空のままにします(MATLABではfalseです)。

残念ながら、完全なurl-addressurlreadが必要なので、十分ではありません。したがって、22バイトのうち11バイトはURLアドレスです。g.gl


代替アプローチ:

エラーをキャッチし、接続がダウンした場合にワークスペースに0(同じくfalse)を残すソリューション:

0;try urlread('http://g.gl'),end

0;デフォルト変数ans0falseMATLAB にあるに初期化します。次にtry、URLを読み取ります。これにより、インターネット接続がダウンしている場合はエラーが発生し、ダウンしていない場合は文字配列(trueMATLAB内)が発生します。

何もキャッチする必要がないので、終了します。urlread呼び出しが成功した場合、ansWebサイトのコンテンツを含む長い文字列になりますans=0。それ以外の場合はになります。


3

Bash、39バイト

exec 4<>/dev/tcp/to./80&&echo 1||echo 0

1
! exec 4<>/dev/tcp/to./80;echo $?
ジェイセン

または、true / falseを印刷する必要はないが、それだけを返すことができる場合exec 4<>/dev/tcp/to./80
-Jasen

3

JavaScriptのES6、71の 43バイト

fetch``.then(a=>alert(1)).catch(a=>alert``)

オンラインの場合はアラート1、オフラインの場合は空の文字列をアラートします。バイトを削るのを手伝ってくれたパトリック・ロバーツに感謝

旧版

_=>fetch('http://enable-cors.org').then(a=>alert(a)).catch(a=>alert(0))

アラート[object Reponse]オンラインであれば、アラート0オフラインの場合

コードスニペットを削除しました。CORSなしで別のドメインから読み込まれるため機能しませんが、ブラウザコンソールでは機能します。


うーん。これは、接続しているときに正しく「true」と表示されますが、切断してブラウザで実行しても何も表示されません。これをどのブラウザ/ OSでテストしましたか?私はクロムwin7のを使用しています
DJMcMayhem

@DJMcMayhemあなたのキャッシュはどうですか?
イスマエルミゲル

@DJMcMayhem Chrome、Win10でテストしました。ネットワーク]タブから無効キャッシュとは、オンラインテストオフライン/オフラインにチェック
Zanchi

これは、52バイト単位で完全なプログラムにすることができますfetch('://to.').then(a=>alert(1)).catch(a=>alert(0))
パトリック・ロバーツ

2

JavaScriptのES6、90の 81バイト

f=a=>{i=new Image();i.src="//placehold.it/1x1";i.onload=b=>a(1);i.onerror=c=>a()}

JavaScriptのES6、22 21バイト(無効)

一部のブラウザーは、navigator.onLineの使用時に完全にサポートしていないか、期待される結果を生成しません。

f=a=>navigator.onLine

2
この回答は、インターネットに接続されていない場合は常にfalseを返すとは限らないことを意味します
ブルー

次のように、ラムダにパラメーターを追加することでバイトを保存できますf=a=>
。– XavCo7

1
あなたの答えはまだ無効のようですが、を取り除くことができますf=
ママファンロール

1
78バイト:a=>{with(new Image()){src="//placehold.it/1x1";onload=b=>a(1);onerror=c=>a()}}´ (got rid of f = `および使用with(){}
イスマエルミゲル

2

Scala、54バイト

x=>(Runtime.getRuntime exec "ping -c 1 ai."waitFor)<1

ものすごく単純; にpingコマンドを実行し、http://ai./0で終了する場合はtrueを返し、そうでない場合はfalseを返します。


2

Brainfuck(非競合)21バイト

++++++[>++++++++<-]>.

Brainfuckはインターネットに接続できません(私の知る限り)。したがって、プログラムが接続できないため、答えは常に 0

このプログラムは技術的には課題に対して正しいものであるにもかかわらず、ハードコードされた出力標準の抜け穴に該当するため、競合しない。


Brainfuckは接続できませんが、これを実行しているコンピューターはインターネットに接続できます(または接続できません)。適切なブレインファックソリューションは、「わからない」と常に応答するプログラムです。
コス

2
@Kos「わからない」は真実/偽ではない-Restioson
1

それは「わからない」ではなく、「だから答えはノーだ」
コーディ

これも0であるので、多分ちょうどあなたが唯一の1バイトのコードを持っているでしょう「\ 0」のバイトを印刷する
12431234123412341234123

2

Powershell、64 26 23バイト

ショーンエステルマンのおかげで38バイトを節約

briantistのおかげで3バイトを節約し、スクリプトを修復しました

Test-Connection -q g.gl

テスト接続-終了。
ショーンエステルマン

PowerShellは解決できません。代わりto.に使用する必要がありますg.gl。さらに、に短縮できますTest-Connection -q g.gl
-briantist

2

PHP、23 PHP + Curl、14

PHPのバックティック演算子を使用する:

<?=`curl to.`;

元の回答:

私は始めようとします:

<?=file('http://x.gl');

これは、x.glに到達できないArray場合、および到達した場合に何も出力しません。

それらが適合するかどうかよくわからない別のバージョン:

<?=getmxrr('x.gl',$a);  // 22 chars

4
「それは抜け穴です」と、私は通常のコンセンサスはそれが言語の方言として数えるということだと思います(したがって、答えはPHP + Curl、15バイトです)。

配列は真実としてカウントされますか?私の質問なので、とにかく競争を許可します。ただ興味がありません。
-Restioson

@Restioson phpは、"Array"印刷しようとすると配列を文字列に変換し(<?=)、ブール値のfalseはに変換され""ます。したがって、実際の戻り値は配列ではなく、空でない文字列または空の文字列です。
クリストフ

@クリストフ私は「配列」が真実または偽としてカウントされるとは思わない
-Restioson

@Restiosonこれは暗黙的にブール値のtrueに変換される文字列です。枝if ("Array") echo 'thruthy';が取られるので、それは真実です。空の文字列はブランチを取得しないため、偽です。
クリストフ

2

Python 3 +リクエスト、59 55 53バイト

要求への回答が必要ですよね?

from requests import*
try:get("http://to.")
except:Z

終了ステータスは、インターネットの場合は0、インターネットがない場合は1です。例:

$ python inet.py 
$ echo $?
0
$ # Remove ethernet cable
$ python inet.py 
$ echo $?
1

変更ログ:

  • -4バイト(Megoに感謝)

別のプロトコル(ftpおそらく)を使用してを実行することにより、これを短縮できますexcept:0/0
メゴ

@Megoリクエストはhttp(s)のみを行うと思います。0/0を追加しました。
matsjoyce

1

Elixir、33バイト

{:ok,_}=:inet.getaddr('to',:inet)

接続されている場合は0、そうでない場合は1。



1

Mathematica 10バイト

Mathematicaの有効なコピーがあり、user.wolfram.comのログイン資格情報があると仮定します

CloudPut@1

値1をクラウドに書き込みます。Truthy:CloudObject [""] Falsey:$ Failed

CloudGet@%

クラウドにアップロードされた値1を返します。


1
デフォルトでは、REPLスニペットは許可されないことに注意してください。&その後、名前のない関数に入れます。
LegionMammal978

リンクを教えていただけますか?
ケリーロウダー


1
私の意見では、これが最良の答えです。しかし、クラウドオブジェクトは真実と見なされますか?ただし、クラウド内の1は真実です。素敵な答え!
-Restioson

@ LegionMammal978、コードをそのまま.wlパッケージファイルに入れ、元の質問で許可されている「プログラム」として実行できます。通常、これらの種類の質問では、入力のある関数が必要です。ユーザー入力は不要です。さらに、関数としての真実/偽のテストは、&の有無にかかわらず同様に機能します。ではCloudPut@1&===$Failed&絶対に違いはありません。最後に、プログラムは出力を返して出力するため、実際にはREPLスニペットではありません。
ケリーロウダー

1

Python 2.7、70 77バイト

from urllib import*
a=1
try:urlopen('http://to.')
except:a=0
print a

import urllib as l
try: 
 l.urlopen('http://a.uk')
 print 1
except:
 print 0

真実の場合は1、偽の場合は0を使用します。a.ukはバイクの衣料品会社にリダイレクトします。変数に割り当ててそれを出力することで3バイトを節約しました。そして、もう一つの「へ」。厄介なインデントを取り除くための2つのトリック(urllibでの動作が確認されています)。


from urllib import*charを節約できると思います(そしてl.もちろんドロップします)。
ニックT

@NickT私はあなたが間にスペースをドロップする可能性が忘れてしまったimport*私はあなたにしている権利だと思うが、私は携帯電話上でだので、私は後でそれを修正します
クリス・H

1

Julia + Bash(with dnsutils)、10バイト

run(`dig`)

`command`juliaでは、cmdで実行できるオブジェクトを作成しますrun


0

Clojure、49バイト

#(try(slurp"http://to.")1(catch Exception _ nil))

1接続できるかどうかを返しますnil

slurpページにアクセスするだけです。NoRouteToHostException失敗時に例外をスローし、キャッチします。

残念ながら、プロトコルとドットは必須のようです。


0

Javascript(Nashorn)、61バイト

print(new java.net.InetSocketAddress("to.",80).getAddress())

HuntroのJavaの回答に基づいています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.