ওয়াই-ফাই ব্যবহার করে রাস্পবেরি পাই উপস্থিতি সনাক্তকরণ


12

আমি কীভাবে আমার রাস্পবেরি পাই ক্রমাগত আমার নেটওয়ার্কের একটি ম্যাক ঠিকানার জন্য স্ক্যান করতে পারি তারপরে কোনও নির্দিষ্ট ম্যাক ঠিকানা সনাক্ত করে কোনও কাজ সম্পাদন করতে পারি?

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


2
আপনার যদি দরকার না রিয়েলটাইম প্রতিক্রিয়া ক্রোন হল সেরা উপায়। প্রথমে আপনি স্ক্রিপ্ট লিখবেন যা শের মধ্যে সত্য বা মিথ্যা জাতীয় কিছু ফেরত দেয় (স্থিতি কোডটি প্রতিক্রিয়া গোপনীয় করতে তিনি সেরা বিকল্প) তারপরে স্ক্রিপ্ট যা পূর্ববর্তী মানটি কোথাও / টেম্পে সংরক্ষণ করবে এবং পরিবর্তনের জন্য যাচাই করবে। সুপেন্ড পরিবর্তন যদি এটি লগ হয়।
মিসাজ 30'17

উত্তর:


3

ফোন হোম

আমার ফোনটি আলাদাভাবে কাজ করে, কারণ সমস্ত ফোনের কিছু আলাদা থাকে। ফোন জেগে থাকলে কেবল পিং প্রতিক্রিয়া ঘটে happens যদি পাইটি পুনরায় চালু হয় এবং ফোনটি স্লিপ মোডে থাকে তবে একাধিক পিংস 100% প্যাকেটের ক্ষতি সহ এর আইপি এবং ম্যাক ঠিকানাগুলি আরপ টেবিলটিতে রাখবে। আমি কেবল শিখেছি যে arpকমান্ডটি অপ্রচলিত, ip neighborএখন ব্যবহৃত হয়েছে।

pi@RPi0:~ $ ip neighbor
169.254.65.43 dev eth0 lladdr 64:31:00:00:00:00 REACHABLE
192.168.0.1 dev wlan0 lladdr ac:b3:00:00:00:00 STALE
fe80::aeb3:13ff:fe00:000 dev wlan0 lladdr ac:b3:00:00:00:00 router STALE

pi@RPi0:~ $ ping 192.168.0.22
PING 192.168.0.22 (192.168.0.22) 56(84) bytes of data.
From 192.168.0.10 icmp_seq=1 Destination Host Unreachable
From 192.168.0.10 icmp_seq=2 Destination Host Unreachable
From 192.168.0.10 icmp_seq=3 Destination Host Unreachable
--- 192.168.0.22 ping statistics ---
34 packets transmitted, 0 received, +3 errors, 100% packet loss, time 34303ms

pi@RPi0:~ $ ip neighbor
192.168.0.1 dev wlan0 lladdr ac:b3:00:00:00:00 REACHABLE
169.254.65.43 dev eth0 lladdr 64:31:00:00:00:00 REACHABLE
192.168.0.22 dev wlan0 lladdr ac:37:00:00:00:00 REACHABLE
fe80::aeb3:13ff:fe00:000 dev wlan0 lladdr ac:b3:00:00:00:00 router STALE

পরীক্ষার পরে, আমার সমাধানটি চিরকালের লুপের ভিতরে দুটি লুপ থাকবে। প্রথম অভ্যন্তরের লুপটি হবে একাধিক বার আইপি অ্যাড্রেসগুলিতে পিং করা, যা আমার ফোনের পক্ষে সম্ভব হবে। আমার রাউটারটি প্রথম 19 আইপি ঠিকানা সংরক্ষণ করেছে এবং আমার প্রায় দেড় ডজন ঠিকানা থাকতে পারে যা আমার ফোন সহ ডিএইচসিপি 192.168.0.20 ঠিকানায় শুরু করবে। আমি একবার ডজন আইপি ঠিকানা পিং করব, ব্যাকগ্রাউন্ড মোডে, প্রতিক্রিয়ার জন্য এক সেকেন্ড অপেক্ষা করব, এবং ফলাফলগুলি জাঙ্ক হিসাবে ফেলে দেব। আমি আরপ টেবিলে আট সেকেন্ড অপেক্ষা করব, এবং ip neighborকমান্ডটি চালাব , আইপি ঠিকানার জন্য ম্যাক ঠিকানাটি গ্রেপ করব । রাউটার এবং ফোনটি এই একই আইপি ঠিকানাটি রাখবে যদি না অস্বাভাবিক কিছু ঘটে থাকে। Arp টেবিল পাই থাকবে, কিন্তু থেকে রাজ্যের পরিবর্তন করতে হবে REACHABLE, STALEএবং FAILEDপিংস এবং সময় থেকে।

দ্বিতীয় অভ্যন্তরের লুপটি ফোনটি ঘরে রয়েছে কিনা তা নির্ধারণের জন্য প্রতি পাঁচ মিনিটে অর্প টেবিলটি পিন করে এবং পরীক্ষা করবে। একটানা তিনটি পিং 'FAILED' দিয়ে ফোনটি বাড়িতে নেই। একটি 'রিচাবল', যখন ফোন বাড়িতে নেই, ফোনটি ঘরে ফিরবে (কিছু করুন)। আইপি ঠিকানাটি যাচাই করতে এবং সংশোধনের প্রয়োজন হলে প্রথম অভ্যন্তরীণ লুপটিতে ফিরে আসার জন্য চেক রয়েছে।

#!/bin/bash
# A script to do something when Phone returns Home.

mac="ac:37:00:00:00:00"    # Your phone mac address
ip_addr=""                 # Leave blank or ip for test
network="192.168.0.0"      # Your network (Class C only)
range="20 32"              # ip address possible range
pgm='echo "do something"'  # program to exec when Phone returns Home

start=$(echo "$range" | cut -d " " -f1)
stop=$(echo "$range" | cut -d " " -f2)
network=$(echo "$network" | cut -d. -f1-3)

echo "Start  $(date)"
while [ 1 ]; do
    cnt=0
    fail=0
    [ "$ip_addr" ] || while [ ! "$ip_addr" ]; do
        for x in $(seq "$start" "$stop"); do
            (junk=$(ping -c1 -W1 "$network"."$x") & )
            wait
        done
        sleep 8
        ip_addr=$(ip neighbor | grep "$mac" | cut -d " " -f1)
        ((cnt++))
        if (( $cnt > 15 )); then
            cnt=0
            echo "--- Phone not Home  $(date)"
            sleep 300      # 5 minutes
        fi
        if [ "$ip_addr" ]; then
            echo "--- Phone is Home, Count = $cnt, Date = $(date)"
            echo "Phone ip = $ip_addr  mac = $mac"
        fi
    done

    while [ "$ip_addr" ]; do
        junk="$(ping -c1 -W1 $ip_addr)"
        sleep 8
        home_nw="$(ip neighbor | grep $ip_addr | cut -d ' ' -f 1,5,6)"
        echo "$home_nw - $(date)"
        is_home=$(echo "$home_nw" | cut -d " " -f3)
        if [ "$is_home" == "REACHABLE" ] && (( "$fail" >= 3 )); then
            echo "--- Phone returned Home - $(date)"
            $pgm
        fi
        [ "$is_home" == "REACHABLE" ] && fail=0
        mac_stat=$(echo "$home_nw" | cut -d " " -f2)
        if [ "$mac_stat" == "FAILED" ]; then
            (( "$fail" < 10 )) && ((fail++))
            ip_test="$(ip neighbor | grep $mac | cut -d ' ' -f1)"
            if [ "$ip_test" ]; then
                [ "$ip_test" == "$ip_addr" ] || ip_addr=""
            fi
            if (( "$fail" == 3 )); then
                echo "--- Phone not at Home  $(date)"
            fi
        else
            if [ "$mac_stat" != "$mac" ]; then
                ip_addr=""
            fi
        fi
        sleep 300          # 5 minutes
    done
done

3

আপনার ফোন / এস আইপি ঠিকানায় কেন কোনও রিজার্ভেশন যুক্ত করবেন না এবং প্রতি কয়েক মিনিট পর পর ক্রোন জবের মাধ্যমে কেবল পিং করুন।

    #!/bin/bash
    HOSTS="x.x.x.1 x.x.x.2"
    COUNT=10
    for myHost in $HOSTS
    do
      count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
      if [ $count -eq 10 ]; then
        # 100% response
        # let the cat out
      fi
    done

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.