নেটওয়ার্ক সংযোগ পরীক্ষা করা হচ্ছে


133

আমি একটি অনলাইন এপিআই অ্যাক্সেস করতে পারি কিনা তা দেখতে চাই, তবে তার জন্য আমার ইন্টারনেট অ্যাক্সেস থাকা দরকার।

পাইথন ব্যবহার করে কোনও সংযোগ উপলব্ধ এবং সক্রিয় আছে কিনা আমি কীভাবে দেখতে পারি?


যদি আপনি অজগর হন তবে এটি সংযোগ ব্যর্থতা বা সময়সীমা শেষ হওয়ার পরে অবশ্যই একটি ব্যতিক্রম ঘটায়। আপনি হয় চেষ্টা করতে পারেন / প্রায় কাছাকাছি ধরতে, বা কেবল এটি পৃষ্ঠতলের।
jdizzle

1
@ ট্রিপটিচ: আমি আশা করি এটি একটি রসিকতা ছিল, কারণ এটি কাজ করে না
পরিদর্শক

1
@ ইন্সপেক্টর easy_install system_of_tubes
জি

2
@ এএফ: উনতবু এর সমাধান দেখুন। আপনি google.com অ্যাক্সেস করতে সক্ষম কিনা তা কীভাবে চেক করবেন তা (দ্রুততম পদ্ধতিতে) এটি দেখায়। যদি আপনার সমস্যাটি API এ অ্যাক্সেস নিয়ে উদ্বেগ প্রকাশ করে, তবে সময়সীমা = 1 নির্ধারণ করে কেন এটি অ্যাক্সেস করার চেষ্টা করবেন না? এটি আপনাকে জানাতে পারে যে আপনি যে API এ অ্যাক্সেস করতে চান সেটি অ্যাক্সেসযোগ্য কিনা। একবার আপনি এটি জানতে পারবেন, তারপরে আপনি এগিয়ে যান এবং এপিআই অ্যাক্সেস করতে পারেন বা আপনি যখন এটি অ্যাক্সেস করতে সক্ষম হন তখন কিছু সময়ের জন্য অপেক্ষা করতে পারেন।
ইন্সপেক্টর

যেমনটি আমি বলেছিলাম, আমার কেবল সরল জিনিস দরকার ছিল যেমন আনটবু বলেছিলেন। আপনার
এটিকে নিয়ে কোনও গোলমাল

উত্তর:


132

সম্ভবত আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

import urllib2

def internet_on():
    try:
        urllib2.urlopen('http://216.58.192.142', timeout=1)
        return True
    except urllib2.URLError as err: 
        return False

বর্তমানে, 216.58.192.142 হ'ল গুগল.কমের আইপি ঠিকানাগুলির মধ্যে একটি। পরিবর্তন http://216.58.192.142যাই হোক না কেন সাইটটিতে দ্রুত সাড়া আশা করা যেতে পারে

এই স্থির আইপি google.com এ চিরকালের জন্য মানচিত্র দেবে না। সুতরাং এই কোডটি দৃust় নয় - এটি চালিয়ে যাওয়ার জন্য অবিচ্ছিন্ন রক্ষণাবেক্ষণের প্রয়োজন হবে।

পুরোপুরি যোগ্যতাসম্পন্ন ডোমেন নেম (এফকিউডিএন) এর পরিবর্তে উপরের কোডটি একটি নির্দিষ্ট আইপি ঠিকানা ব্যবহার করার কারণটি হ'ল এফকিউডিএনকে একটি ডিএনএস লুকআপ প্রয়োজন। যখন মেশিনটিতে একটি কার্যকরী ইন্টারনেট সংযোগ নেই, তখন ডিএনএস অনুসন্ধান নিজেই কলটিকে urllib_request.urlopenএক সেকেন্ডেরও বেশি সময় অবরুদ্ধ করতে পারে । এটি নির্দেশ করার জন্য @ আরজিটারবার্গকে ধন্যবাদ জানাই।


উপরের স্থির আইপি ঠিকানাটি যদি কাজ না করে থাকে তবে আপনি চালিয়ে গুগল ডটকমের (ইউনিক্সে) একটি বর্তমান আইপি ঠিকানা খুঁজে পেতে পারেন

% dig google.com  +trace 
...
google.com.     300 IN  A   216.58.192.142

1
"কলটিতে কলটি" urlopenইন্টারনেট "চালু" না থাকলেও 1 সেকেন্ডের চেয়ে বেশি সময় নিতে পারে না - "- উদ্ধৃতি। সরবরাহ করা ইউআরএল যদি অবৈধ হয় তবে এটি সত্য নয়, তবে ডিএনএস লুকআপ ব্লক হবে। এটি কেবল ওয়েব-সার্ভারের সাথে প্রকৃত সংযোগের জন্য সত্য। এই ডিএনএস
লক

8
এটি আর দীর্ঘ কাজ নয়। 2013 সালের সেপ্টেম্বর পর্যন্ত, দীর্ঘ সময় পরে 74.125.113.99 বার বের হয়েছে, সুতরাং এই ফাংশনটি সর্বদা মিথ্যা ফিরিয়ে দেবে। আমি মনে করি গুগল তাদের নেটওয়ার্ক সেট আপ হয়েছে পরিবর্তিত হয়েছে।
theamk

4
এখন বাকি সহজ। "74.125.113.99 urllib" এর জন্য গুগল। এটি হাজার হাজার ওপেন-সোর্স প্রকল্পগুলি ফিরিয়ে দেবে যা ভুল কোডকে অন্তর্ভুক্ত করেছিল। (আমার জন্য, কেবলমাত্র প্রথম পৃষ্ঠায় কমপক্ষে 5 রয়েছে: এনভিপি, সুইকিচবোট, প্লেয়ারডিক্ট, উপ, চেক সংযোগ)। এগুলি এখন ভেঙে গেছে।
theamk

4
যদি এটি পরিষ্কার না হয় তবে আমি এই পদ্ধতিটি ব্যবহার করে প্রস্তাবটি গ্রহণ করি না। পুরানো আইপি 3 বছরেরও কম সময় ধরে ভাল ছিল। নতুন আইপি আজ কাজ করে। এটি আপনার প্রকল্পে রাখুন এবং এটি রহস্যজনকভাবে আবার 3 বছরেরও কম সময়ে ভেঙে যেতে পারে।
theamk

1
এর ... খালি খুলুন http://google.comএবং তারপরে আপনি সমস্ত সমস্যাগুলি সমাধান করবেন প্রত্যেকে এখানেই কথা বলতে থাকে। আইপি ঠিকানা ব্যবহার করার দরকার নেই ...
জেসন সি

106

আমরা যদি কিছু ইন্টারনেট সার্ভারের সাথে সংযোগ স্থাপন করতে পারি তবে আমাদের সাথে সংযোগ রয়েছে। তবে, দ্রুত এবং সবচেয়ে নির্ভরযোগ্য পদ্ধতির জন্য, সমস্ত সমাধানগুলি খুব কমপক্ষে নিম্নলিখিত প্রয়োজনীয়তাগুলি মেনে চলতে হবে:

  • ডিএনএস রেজোলিউশন এড়িয়ে চলুন (আমাদের বেশিরভাগ সময় উপলব্ধ থাকার জন্য সুপরিচিত এবং গ্যারান্টিযুক্ত একটি আইপি লাগবে)
  • অ্যাপ্লিকেশন স্তর সংযোগগুলি এড়িয়ে চলুন (কোনও HTTP / FTP / IMAP পরিষেবায় সংযুক্ত হওয়া)
  • পাইথন বা পছন্দসই অন্যান্য ভাষা থেকে বাহ্যিক ইউটিলিটিগুলিতে কল এড়িয়ে চলুন (আমাদের এমন ভাষা-অজ্ঞাস্তিক সমাধান আসতে হবে যা তৃতীয় পক্ষের সমাধানগুলিতে নির্ভর করে না)

এগুলি মেনে চলার জন্য, একটি পদ্ধতির কাছে যেতে পারে, গুগলের কোনও পাবলিক ডিএনএস সার্ভারের মধ্যে কোনওটি পৌঁছনীয় কিনা তা পরীক্ষা করে দেখুন । এই সার্ভারগুলির জন্য IPv4 ঠিকানাগুলি হ'ল 8.8.8.8এবং 8.8.4.4। আমরা তাদের যে কোনওটির সাথে সংযোগ স্থাপনের চেষ্টা করতে পারি।

হোস্টের একটি দ্রুত এনএম্যাপ 8.8.8.8নীচে ফলাফল দিয়েছে:

$ sudo nmap 8.8.8.8

Starting Nmap 6.40 ( http://nmap.org ) at 2015-10-14 10:17 IST
Nmap scan report for google-public-dns-a.google.com (8.8.8.8)
Host is up (0.0048s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
53/tcp open  domain

Nmap done: 1 IP address (1 host up) scanned in 23.81 seconds

যেমনটি আমরা দেখতে পাচ্ছি, 53/tcpএটি খোলামেলা এবং ফিল্টারবিহীন। যদি আপনার নন-রুট ব্যবহারকারী হন তাহলে, ব্যবহার করতে স্মরণ sudoবা -PnNmap- র জন্য যুক্তি পেরেছিলেন প্রোবের প্যাকেট পাঠাতে এবং নির্ধারণ যদি একটি হোস্ট আপ করতে।

পাইথনের সাথে চেষ্টা করার আগে, বাহ্যিক সরঞ্জাম, নেটক্যাট ব্যবহার করে সংযোগটি পরীক্ষা করি:

$ nc 8.8.8.8 53 -zv
Connection to 8.8.8.8 53 port [tcp/domain] succeeded!

Netcat নিশ্চিত করে যে আমরা পৌঁছতে পারে যে 8.8.8.8ওভার 53/tcp। সংযোগ 8.8.8.8:53/tcpপরীক্ষা করতে আমরা পাইথনে এখন সকেট সংযোগ স্থাপন করতে পারি :

import socket

def internet(host="8.8.8.8", port=53, timeout=3):
    """
    Host: 8.8.8.8 (google-public-dns-a.google.com)
    OpenPort: 53/tcp
    Service: domain (DNS/TCP)
    """
    try:
        socket.setdefaulttimeout(timeout)
        socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
        return True
    except socket.error as ex:
        print(ex)
        return False

internet()

আর একটি পদ্ধতি হ'ল এই সার্ভারগুলির মধ্যে একটিতে ম্যানুয়ালি কার্টেড ডিএনএস প্রোব পাঠানো এবং প্রতিক্রিয়ার জন্য অপেক্ষা করা wait তবে, আমি ধরে নিচ্ছি, প্যাকেট ড্রপ, ডিএনএস রেজোলিউশন ব্যর্থতা ইত্যাদির কারণে তুলনায় এটি ধীর হতে পারে prove আপনি যদি অন্যথায় মনে করেন তবে মন্তব্য করুন।

আপডেট # 1: @ থ্যামকের মন্তব্যে ধন্যবাদ, টাইমআউট এখন একটি যুক্তি এবং এটি 3sডিফল্টরূপে শুরু করা হয়েছে।

আপডেট # 2: আমি এই প্রশ্নের সমস্ত বৈধ উত্তরের দ্রুত এবং সর্বাধিক জেনেরিক বাস্তবায়ন সনাক্ত করার জন্য দ্রুত পরীক্ষা করেছি। এখানে সংক্ষিপ্তসার:

$ ls *.py | sort -n | xargs -I % sh -c 'echo %; ./timeit.sh %; echo'
defos.py
True
00:00:00:00.487

iamaziz.py
True
00:00:00:00.335

ivelin.py
True
00:00:00:00.105

jaredb.py
True
00:00:00:00.533

kevinc.py
True
00:00:00:00.295

unutbu.py
True
00:00:00:00.546

7h3rAm.py
True
00:00:00:00.032

এবং আরও একবার:

$ ls *.py | sort -n | xargs -I % sh -c 'echo %; ./timeit.sh %; echo'
defos.py
True
00:00:00:00.450

iamaziz.py
True
00:00:00:00.358

ivelin.py
True
00:00:00:00.099

jaredb.py
True
00:00:00:00.585

kevinc.py
True
00:00:00:00.492

unutbu.py
True
00:00:00:00.485

7h3rAm.py
True
00:00:00:00.035

Trueউপরের আউটপুটটিতে ইঙ্গিত দেয় যে নিজ নিজ লেখকের এই সমস্ত প্রয়োগগুলি সঠিকভাবে ইন্টারনেটে সংযোগটি সনাক্ত করে। মিলি সেকেন্ড রেজোলিউশনের সাথে সময় দেখানো হয়।

আপডেট # 3: ব্যতিক্রম হ্যান্ডলিং পরিবর্তনের পরে আবার পরীক্ষিত:

defos.py
True
00:00:00:00.410

iamaziz.py
True
00:00:00:00.240

ivelin.py
True
00:00:00:00.109

jaredb.py
True
00:00:00:00.520

kevinc.py
True
00:00:00:00.317

unutbu.py
True
00:00:00:00.436

7h3rAm.py
True
00:00:00:00.030

6
এই DNS সমাধানের এড়ানো সেরা উত্তর হয়, এবং ব্যঙ্গ করে বন্দর 53. গুগলের ডিএনএস সেবা পরামর্শ
m3nda

1
@ অবিহেনহেনওয়াল গুগল ডিএনএস নাম রেজোলিউশন পরিষেবাটি বিনামূল্যে ব্যবহার করার জন্য এই আইপি সরবরাহ করে as গুগল অন্যথায় সিদ্ধান্ত না নিলে আইপি পরিবর্তন করার কথা নয়। আমি এখন কয়েক বছর ধরে এটি কোনও সমস্যা ছাড়াই বিকল্প ডিএনএস সার্ভার হিসাবে ব্যবহার করছি।
7h3rAm

1
@ লুক এটাকে নির্দেশ করার জন্য ধন্যবাদ। আমি ব্যবহারকারীদের ব্যতিক্রম সম্পর্কে অবহিত করার জন্য উত্তর আপডেট করেছি এবং ডিফল্ট উত্তর হিসাবে মিথ্যা ফিরিয়ে দিয়েছি।
7h3rAm

2
@ জেসনসি টিসিপি / ৫৩ এর সাথে কানেক্ট করার বিষয়টি ডিএনএস সংযোগের সাথে পোর্ট ৫ over এর চেয়ে পৃথক। না এটা সত্য না. একটি পোর্টের সাথে টিসিপি সকেটের সাথে সংযোগ করা অ্যাপ্লিকেশন স্তরের সংযোগ নয়। আমি কোনও ডিএনএস লুকআপ করছি না, কেবল অর্ধ টিসিপি হ্যান্ডশেক করছি। এটি একটি সম্পূর্ণ ডিএনএস অনুসন্ধান করার মতো জিনিস নয়।
এআরএম

2
আমাদের কি close()সকেটে ফোন করা উচিত নয় ?
brk

60

কেবলমাত্র একটি হেড অনুরোধ করা দ্রুততর হবে যাতে কোনও এইচটিএমএল আনা যায় না।
এছাড়াও আমি নিশ্চিত যে গুগল এইভাবে আরও ভাল পছন্দ করবে :)

try:
    import httplib
except:
    import http.client as httplib

def have_internet():
    conn = httplib.HTTPConnection("www.google.com", timeout=5)
    try:
        conn.request("HEAD", "/")
        conn.close()
        return True
    except:
        conn.close()
        return False

8
শীর্ষের উত্তরটি 1 সেকেন্ড সময় লাগে মাত্র 20 মিলি সেকেন্ড নেয়।
ওয়ালি

8
+1 আপনি কেবল সার্ভারের কাছে পৌঁছনীয় এবং প্রতিক্রিয়া করছে কিনা তা পরীক্ষা করতে চাইলে পুরো পৃষ্ঠাটি ডাউনলোড করা কোনও অর্থবোধ করে না। আপনার যদি সামগ্রীর প্রয়োজন হয় তবে সামগ্রীটি ডাউনলোড করুন
thatsIch

কোনও কারণ ছাড়াই, url '8.8' ব্যবহার করা এখনও কাজ করে যা স্পষ্টতই, '8.8' বা ' 8.8 ' একটি বাস্তব ওয়েব ব্রাউজারে কাজ করে না।
পোলভ

2 ঘন্টা একটি কাজের সমাধান খুঁজছেন এবং তারপরে আমি এটি পেয়েছিলাম ... পরিষ্কার এবং সহজ
পেড্রো সার্পা

21

ইউবুট্নু / কেভিন সি উত্তরের বিকল্প হিসাবে, আমি এই requestsপ্যাকেজটি ব্যবহার করি :

import requests

def connected_to_internet(url='http://www.google.com/', timeout=5):
    try:
        _ = requests.get(url, timeout=timeout)
        return True
    except requests.ConnectionError:
        print("No internet connection available.")
    return False

বোনাস: এটি এই ফাংশনটিতে বাড়ানো যেতে পারে যা কোনও ওয়েবসাইটকে দেয়।

def web_site_online(url='http://www.google.com/', timeout=5):
    try:
        req = requests.get(url, timeout=timeout)
        # HTTP errors are not raised by default, this statement does that
        req.raise_for_status()
        return True
    except requests.HTTPError as e:
        print("Checking internet connection failed, status code {0}.".format(
        e.response.status_code))
    except requests.ConnectionError:
        print("No internet connection available.")
    return False

1
অনুরোধ একটি দুর্দান্ত গ্রন্থাগার। তবে অনেক উদাহরণ অসদৃশ এখানে আমি ব্যবহার করেন IANA এর example.com বা example.org একটি অধিক নির্ভরযোগ্য দীর্ঘমেয়াদী পছন্দ হিসাবে যেহেতু এটি সম্পূর্ণরূপে দ্বারা নিয়ন্ত্রিত হচ্ছে ICANN এর
চিরালে

ইন্টারনেট চলমান স্থিতি পরীক্ষা করার অন্য কোন উপায় আছে কি? কারণ আপনি যদি google.comআবার পাইনিং করেন তবে তারা আমাদের আইপি ব্লক করবে। সুতরাং অন্য কোন উপায় আছে?
সানজিভ

15

পাইথন ৩.২-এ নতুন কোডের জন্য আনটবু কী বলেছিল তা কেবল আপডেট করতে

def check_connectivity(reference):
    try:
        urllib.request.urlopen(reference, timeout=1)
        return True
    except urllib.request.URLError:
        return False

এবং, কেবল লক্ষ করুন, এখানে ইনপুট (রেফারেন্স) আপনি যে urlটি যাচাই করতে চান তা হ'ল: আমি এমন কোনও কিছু বেছে নেওয়ার পরামর্শ দিচ্ছি যা আপনি যেখানে থাকেন সেখানে দ্রুত যোগাযোগ করে - যেমন আমি দক্ষিণ কোরিয়ায় থাকি, তাই সম্ভবত আমি http: / এর রেফারেন্স সেট করব / /www.naver.com


যদি কোনও ডিএনএস সার্ভার উপলব্ধ না হয় তবে আমি 30 সেকেন্ড অপেক্ষা করব।
ভিক্টর জোরাস

10

আপনি কেবল ডেটা ডাউনলোড করার চেষ্টা করতে পারেন, এবং সংযোগ ব্যর্থ হলে আপনি জানতে পারবেন যে সংযোগের সাথে সামথিংগুলি ভাল নয়।

কম্পিউটারটি ইন্টারনেটের সাথে সংযুক্ত কিনা তা মূলত আপনি পরীক্ষা করতে পারবেন না। ব্যর্থতার অনেকগুলি কারণ থাকতে পারে, যেমন ভুল ডিএনএস কনফিগারেশন, ফায়ারওয়ালস, নেট। সুতরাং আপনি কিছু পরীক্ষা করে নিলেও, আপনি গ্যারান্টি দিতে পারবেন না যে আপনি চেষ্টা না করা পর্যন্ত আপনার API এর সাথে সংযোগ থাকবে have


2
"অনুমতি চেয়ে ক্ষমা চাওয়া সহজ"
কোব্বল

এই ভাল হতে হবে না। আমার কেবল কোনও সাইটের সাথে সংযুক্ত হওয়ার বা কিছু পিং করার চেষ্টা করতে হবে এবং যদি এটি সময়সীমা দেয় তবে o আমি এটা কিভাবে করবো?
এএফ।

আপনি কেবল এপিআইতে সংযোগ দেওয়ার চেষ্টা করতে পারবেন না এমন কোনও কারণ আছে? কেন সত্যিকারের সংযোগের আগে আপনাকে এটি পরীক্ষা করতে হবে?
টমাসজ উইসোকি

আমি পাইথন ব্যবহার করে একটি এইচটিএমএল পৃষ্ঠা তৈরি করি। এইচটিএমএল পৃষ্ঠাটি অজগর প্রোগ্রামে আমি যে যুক্তি দিই তা ডিপেন্ড করে। যদি আমি এপিআইতে অ্যাক্সেস করতে পারি তবে আমাকে কেবল কিছু এইচটিএমএল কোড রাখা দরকার। এজন্য আমার আগে জানা দরকার।
এএফ।

6
import urllib

def connected(host='http://google.com'):
    try:
        urllib.urlopen(host)
        return True
    except:
        return False

# test
print( 'connected' if connected() else 'no internet!' )

অজগর 3 এর জন্য ব্যবহার করুন urllib.request.urlopen(host)


4

আপনি যেভাবেই চেষ্টা করার চেষ্টা করেছিলেন সেই অপারেশনটি ব্যবহার করে দেখুন। যদি এটি ব্যর্থ হয় অজগরটি আপনাকে অবহিত করতে হবে know

কোনও সংযোগ সনাক্ত করতে প্রথমে কিছু তুচ্ছ অপারেশন চেষ্টা করার জন্য একটি বর্ণের শর্ত প্রবর্তন করা হবে। যদি আপনি পরীক্ষা করার সময় ইন্টারনেট সংযোগটি বৈধ হয় তবে সত্যিকারের কাজ করার আগে আপনাকে নীচে নামলে কী হবে?


3

লোকালহোস্ট যদি 127.0.0.1 চেষ্টা থেকে পরিবর্তন করা হয় তবে এটি কাজ করতে পারে না

import socket
ipaddress=socket.gethostbyname(socket.gethostname())
if ipaddress=="127.0.0.1":
    print("You are not connected to the internet!")
else:
    print("You are connected to the internet with the IP address of "+ ipaddress )

সম্পাদনা না করা আপনার কম্পিউটারের আইপি 127.0.0.1 এ থাকবে যখন ইন্টারনেটের সাথে সংযুক্ত থাকে না। এই কোডটি মূলত আইপি ঠিকানা পায় এবং তারপরে জিজ্ঞাসা করে যে এটি লোকালহোস্টের আইপি ঠিকানা কিনা। আশা করি এইটি কাজ করবে


এটি একটি আকর্ষণীয় চেক, যদিও এটি কেবলমাত্র আপনি যদি কোনও নেটওয়ার্কের সাথে সংযুক্ত থাকেন তবে তা সনাক্ত করবে। এটি ইন্টারনেট হোক বা নাটকীয় সাবনেট এখনও একটি প্রশ্ন থেকে যাবে।
7h3rAm

@ 7h3rAm, এটি একটি ভাল পয়েন্ট, DCHP এর জন্য ইন্টারনেট সংযোগের দরকার নেই, আমার ভুল।

এটির জন্য কেবল একটি এনআইসি সংযোগ দরকার যা একটি আইপি বরাদ্দ পেয়েছে। অন্য সমস্ত উত্তরগুলির মতো নয়, এর জন্য ল্যান, রাউটার, ফায়ারওয়াল, আইএসপি এর সাথে অন্য কোনও সিস্টেমে সংযোগের প্রয়োজন নেই। এটি এখনও দেখাতে ব্যর্থ হয় যে এনআইসি সংযুক্ত রয়েছে যদি এটি কোনও ডিএইচসিপি নির্ধারিত ঠিকানা (স্থিতিশীল) হয়
ব্যবহারকারী150471

@ ব্যবহারকারী150471, ইতিমধ্যে নির্দেশিত, আপনার অবদানের জন্য আপনাকে ধন্যবাদ।

3

এখানে আমার সংস্করণ

import requests

try:
    if requests.get('https://google.com').ok:
        print("You're Online")
except:
    print("You're Offline")

1
আমি এটি পছন্দ করি তবে এটি যদি অনুরোধ থেকে উত্থাপিত নির্দিষ্ট সময়সীমা বা সংযোগ ত্রুটি বাদ দেয় তবে ভাল হয়। যেমনটি, একটি বিদ্যুত্-द्रुत সিআরটিএল-সি অফলাইনে মুদ্রণ করবে।
ব্যবহারকারী 2561747

2

এর সাথে একটি আধুনিক পোর্টেবল সমাধান requests:

import requests

def internet():
    """Detect an internet connection."""

    connection = None
    try:
        r = requests.get("https://google.com")
        r.raise_for_status()
        print("Internet connection detected.")
        connection = True
    except:
        print("Internet connection not detected.")
        connection = False
    finally:
        return connection

বা, এমন একটি সংস্করণ যা একটি ব্যতিক্রম উত্থাপন করে:

import requests
from requests.exceptions import ConnectionError

def internet():
    """Detect an internet connection."""

    try:
        r = requests.get("https://google.com")
        r.raise_for_status()
        print("Internet connection detected.")
    except ConnectionError as e:
        print("Internet connection not detected.")
        raise e

1

এটি করার সর্বোত্তম উপায় হ'ল ওয়েবসাইটটি খুঁজে না পাওয়া যদি অজগর সবসময় দেয় এমন কোনও আইপি ঠিকানার বিরুদ্ধে এটি পরীক্ষা করে দেখানো। এই ক্ষেত্রে এটি আমার কোড:

import socket

print("website connection checker")
while True:
    website = input("please input website: ")
    print("")
    print(socket.gethostbyname(website))
    if socket.gethostbyname(website) == "92.242.140.2":
        print("Website could be experiencing an issue/Doesn't exist")
    else:
        socket.gethostbyname(website)
        print("Website is operational!")
        print("")

1

আমার প্রিয় একটি, যখন কোনও ক্লাস্টারে স্ক্রিপ্টগুলি চলছে বা না or

import subprocess

def online(timeout):
    try:
        return subprocess.run(
            ['wget', '-q', '--spider', 'google.com'],
            timeout=timeout
        ).returncode == 0
    except subprocess.TimeoutExpired:
        return False

এইটি নিঃশব্দে উইজেটটি চালায়, কোনও কিছুই ডাউনলোড না করেই প্রদত্ত দূরবর্তী ফাইলটি ওয়েবে উপস্থিত রয়েছে তা যাচাই করে


0

আনটবুর উত্তরটিকে একটি প্রাথমিক বিন্দু হিসাবে গ্রহণ করা , এবং অতীতে "স্ট্যাটিক" আইপি ঠিকানা পরিবর্তন করে জ্বালিয়ে দেওয়া, আমি একটি সাধারণ ক্লাস তৈরি করেছি যা একবার ডিএনএস লুকআপ ব্যবহার করে পরীক্ষা করে (যেমন, ইউআরএল " https: // www ব্যবহার করে) .google.com ") এবং তারপরে চেকগুলিতে ব্যবহারের জন্য প্রতিক্রিয়াশীল সার্ভারের আইপি ঠিকানা সঞ্চয় করে। এইভাবে, আইপি ঠিকানাটি সর্বদা আপ টু ডেট থাকে (ধরে নিই যে ক্লাসটি প্রতি কয়েক বছর অন্তত একবার পুনরায় আরম্ভ করা হয়)। আমি এই উত্তরের জন্য গাওয়ারিকেও ক্রেডিট দিই , যা সার্ভারের আইপি ঠিকানা (কোনও পুনর্নির্দেশের পরে ইত্যাদি) কীভাবে পাবেন তা আমাকে দেখিয়েছিল। দয়া করে এই সমাধানটির আপাত হ্যাকানি উপেক্ষা করুন, আমি এখানে একটি ন্যূনতম কাজের উদাহরণের জন্য যাচ্ছি। :)

আমার যা আছে তা এখানে:

import socket

try:
    from urllib2 import urlopen, URLError
    from urlparse import urlparse
except ImportError:  # Python 3
    from urllib.parse import urlparse
    from urllib.request import urlopen, URLError

class InternetChecker(object):
    conn_url = 'https://www.google.com/'

    def __init__(self):
        pass

    def test_internet(self):
        try:
            data = urlopen(self.conn_url, timeout=5)
        except URLError:
            return False

        try:
            host = data.fp._sock.fp._sock.getpeername()
        except AttributeError:  # Python 3
            host = data.fp.raw._sock.getpeername()

        # Ensure conn_url is an IPv4 address otherwise future queries will fail
        self.conn_url = 'http://' + (host[0] if len(host) == 2 else
                                     socket.gethostbyname(urlparse(data.geturl()).hostname))

        return True

# Usage example
checker = InternetChecker()
checker.test_internet()

0

ছয়টি উত্তর নেওয়া আমি মনে করি আমরা কোনওভাবেই সরল করতে পারি, একটি গুরুত্বপূর্ণ বিষয় যেমন নবাগত ব্যক্তিরা অত্যন্ত প্রযুক্তিগত বিষয়ে হারিয়ে যায়।

এখানে আমি শেষ পর্যন্ত আমার পিভি পর্যবেক্ষণের জন্য আমার সংযোগ (3 জি, ধীর) প্রতিষ্ঠিত হওয়ার জন্য অপেক্ষা করতে ব্যবহার করব।

পাইপ 3 এর অধীনে রাস্পবিয়ান 3.4.2 এর সাথে কাজ করে

from urllib.request import urlopen
from time import sleep
urltotest=http://www.lsdx.eu             # my own web page
nboftrials=0
answer='NO'
while answer=='NO' and nboftrials<10:
    try:
        urlopen(urltotest)
        answer='YES'
    except:
        essai='NO'
        nboftrials+=1
        sleep(30)       

সর্বাধিক চলমান: 5 মিনিটে পৌঁছে গেলে আমি এক ঘন্টা সময় চেষ্টা করব তবে এটির অন্য স্ক্রিপ্ট!


আপনার প্রবন্ধটি ব্যবহার হয় না, তাই না?
কিডকোডার

0

ইভলিনের উত্তর গ্রহণ করে এবং কিছু অতিরিক্ত চেক যুক্ত করুন যেহেতু আমার রাউটারটি তার আইপি ঠিকানা 192.168.0.1 সরবরাহ করে এবং গুগল ডটকমকে জিজ্ঞাসাবাদ করার সময় যদি এটির কোনও ইন্টারনেট সংযোগ না থাকে তবে একটি মাথা ফিরে আসে।

import socket

def haveInternet():
    try:
        # first check if we get the correct IP-Address or just the router's IP-Address
        info = socket.getaddrinfo("www.google.com", None)[0]
        ipAddr = info[4][0]
        if ipAddr == "192.168.0.1" :
            return False
    except:
        return False

    conn = httplib.HTTPConnection("www.google.com", timeout=5)
    try:
        conn.request("HEAD", "/")
        conn.close()
        return True
    except:
        conn.close()
        return False

0

পাইথন 3.6 এ এটি আমার জন্য কাজ করে

import urllib
from urllib.request import urlopen


def is_internet():
    """
    Query internet using python
    :return:
    """
    try:
        urlopen('https://www.google.com', timeout=1)
        return True
    except urllib.error.URLError as Error:
        print(Error)
        return False


if is_internet():
    print("Internet is active")
else:
    print("Internet disconnected")

0

আমি জোয়েলের কোডটিতে কয়েকটি যুক্ত করেছি।

    import socket,time
    mem1 = 0
    while True:
        try:
                host = socket.gethostbyname("www.google.com") #Change to personal choice of site
                s = socket.create_connection((host, 80), 2)
                s.close()
                mem2 = 1
                if (mem2 == mem1):
                    pass #Add commands to be executed on every check
                else:
                    mem1 = mem2
                    print ("Internet is working") #Will be executed on state change

        except Exception as e:
                mem2 = 0
                if (mem2 == mem1):
                    pass
                else:
                    mem1 = mem2
                    print ("Internet is down")
        time.sleep(10) #timeInterval for checking

0

আমার প্রকল্পগুলির জন্য আমি গুগল পাবলিক ডিএনএস সার্ভারে ৮.৮.৮.৮ পিং করার জন্য স্ক্রিপ্ট পরিবর্তিত স্ক্রিপ্ট ব্যবহার করি । বাহ্যিক নির্ভরতা ছাড়াই 1 সেকেন্ড এবং কোর পাইথন গ্রন্থাগারগুলির টাইমআউট ব্যবহার করা:

import struct
import socket
import select


def send_one_ping(to='8.8.8.8'):
   ping_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.getprotobyname('icmp'))
   checksum = 49410
   header = struct.pack('!BBHHH', 8, 0, checksum, 0x123, 1)
   data = b'BCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwx'
   header = struct.pack(
      '!BBHHH', 8, 0, checksum, 0x123, 1
   )
   packet = header + data
   ping_socket.sendto(packet, (to, 1))
   inputready, _, _ = select.select([ping_socket], [], [], 1.0)
   if inputready == []:
      raise Exception('No internet') ## or return False
   _, address = ping_socket.recvfrom(2048)
   print(address) ## or return True


send_one_ping()

নির্বাচন সময়সীমার মান 1, কিন্তু এই উদাহরণে 1 সেকেন্ড চেয়ে আরো নির্দ্ধিধায় ব্যর্থ পছন্দের একটি ফ্লোটিং পয়েন্ট সংখ্যা হতে পারে।


0

অনুরোধগুলি আমদানি করুন এবং এই সাধারণ পাইথন কোডটি ব্যবহার করে দেখুন।

def check_internet():
url = 'http://www.google.com/'
timeout = 5
try:
    _ = requests.get(url, timeout=timeout)
    return True
except requests.ConnectionError:
return False
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.