จะทดสอบการเชื่อมต่ออินเทอร์เน็ตด้วย bash ได้อย่างไร?


113

จะทดสอบการเชื่อมต่ออินเทอร์เน็ตโดยไม่กระตุกเว็บไซต์ได้อย่างไร? ฉันหมายความว่าจะเกิดอะไรขึ้นหากมีการเชื่อมต่อ แต่ไซต์ไม่ทำงาน มีการตรวจสอบการเชื่อมต่อกับโลกหรือไม่?


2
ping หลาย ๆ ไซต์?

1
แต่ฉันไม่ต้องการ ping เว็บไซต์ไม่มีตัวเลือกอื่น?
lauriys

6
ฉันแค่อยากเห็นว่าอาจมีวิธีอื่น!
lauriys

2
ไม่มีวิธีใดที่ดีไปกว่าการส่งและรับแพ็กเก็ตเดียวไปยังชุดที่อยู่ที่คุณรู้ว่าจะไม่ออฟไลน์ทั้งหมดในคราวเดียวอีกวิธีหนึ่งคือตรวจสอบ DNS ชุดปัจจุบันของคุณหากคุณไม่ต้องการให้แอปพลิเคชันของคุณส่ง Ping ไปยังสาธารณะมากขึ้น โดเมน.
Tamara Wijsman

14
ฉันอยากรู้ว่ามีใครฟังโดยไม่ส่งเสียงบ้าง!
Kaz

คำตอบ:


131

โดยไม่ต้อง ping

#!/bin/bash

wget -q --spider http://google.com

if [ $? -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi

-q : โหมดเงียบ

--spider : อย่าเพิ่งตรวจสอบความพร้อมของหน้า

$?: รหัสส่งคืนเชลล์

0 : เชลล์รหัส "ตกลงทั้งหมด"

ไม่มี wget

#!/bin/bash

echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi

2
ดีมาก ... แต่แน่นอนว่ากล่องมี wget อุปกรณ์ฝังตัวและสิ่งที่ไม่อาจเป็นไปได้ ;)
Eric Sebasta

5
ลองสิ่งนี้: echo -e "GET google.com HTTP / 1.0 \ n \ n" | nc google.com 80> / dev / null 2> & 1
user3439968

1
tcping ก็ช่วยได้เช่นกัน (tcping www.yahoo.com 80) && echo "Site is up"
David Ramirez

คำสั่ง if / else ใช้ที่นี่กับคำอธิบายที่ดีมาก ขอบคุณ !
Danijel-James W

1
@ user3439968 คุณต้องเพิ่มระยะหมดเวลาncเพื่อให้แน่ใจว่าหมดเวลา บางอย่างเช่นnc google.com 80 -w 10
kaptan

93

ปิงเกตเวย์เริ่มต้นของคุณ:

#!/bin/bash
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error

14
เทคนิคดีๆก็เอาไปดัดแปลงใช้ใน function ได้function ping_gw() { ... && return 0 || return 1 }:ping_gw || (echo "no network, bye" && exit 1)
memnoch_proxy

1
บน mac os สิ่งนี้ใช้ไม่ได้ผ่านการคัดลอกวาง: "-bash: ip: command not found ping: wrong option - w"
Benedikt S. Vogler

1
ส่งเสียงเตือนที่ผิดพลาดหากเรียกใช้จากแขกจำลองเสมือนในขณะที่โฮสต์ไม่ได้เชื่อมต่อ
Teresa e Junior

1
ให้ผลลบที่ผิดพลาดในระบบปฏิบัติการระดับประถมศึกษา (0.4.1, Acer Aspire E 15)
Malcolm

1
ระวังเรื่องนี้ด้วย ฉันเพิ่งทดสอบสิ่งนี้โดยการทำifconfig down wlan0และฉันยังมีเกตเวย์เริ่มต้นและสามารถใช้ Ping ได้แม้ว่าในความเป็นจริงฉันจะไม่สามารถเข้าถึงโลกภายนอกได้
Bruno Bronosky

29

ขอบคุณมากสำหรับผู้ใช้somedrewสำหรับโพสต์ของพวกเขาที่นี่: https://bbs.archlinux.org/viewtopic.php?id=55485เมื่อ 2008-09-20 02:09:48

การมองใน / sys / class / net ควรเป็นวิธีเดียว

นี่คือสคริปต์ของฉันเพื่อทดสอบการเชื่อมต่อเครือข่ายอื่นที่ไม่ใช่การวนกลับ ฉันใช้ด้านล่างนี้ในสคริปต์อื่นที่ฉันมีเพื่อทดสอบเป็นระยะว่าเว็บไซต์ของฉันสามารถเข้าถึงได้หรือไม่ หากไม่สามารถเข้าถึงได้หน้าต่างป๊อปอัปจะแจ้งเตือนฉันถึงปัญหา

สคริปต์ด้านล่างป้องกันไม่ให้ฉันได้รับข้อความป๊อปอัปทุกๆห้านาทีเมื่อใดก็ตามที่แล็ปท็อปของฉันไม่ได้เชื่อมต่อกับเครือข่าย

#!/usr/bin/bash

# Test for network conection
for interface in $(ls /sys/class/net/ | grep -v lo);
do
  if [[ $(cat /sys/class/net/$interface/carrier) = 1 ]]; then OnLine=1; fi
done
if ! [ $OnLine ]; then echo "Not Online" > /dev/stderr; exit; fi

หมายเหตุสำหรับผู้ที่เพิ่งทุบตี:คำสั่ง 'if' ขั้นสุดท้ายจะทดสอบว่า NOT [!] ออนไลน์และออกหากเป็นกรณีนี้ ดู man bash และค้นหา "Expressions may be combination" สำหรับรายละเอียดเพิ่มเติม

ป.ล. ฉันรู้สึกว่า ping ไม่ใช่สิ่งที่ดีที่สุดที่จะใช้ที่นี่เพราะมีจุดมุ่งหมายเพื่อทดสอบการเชื่อมต่อกับโฮสต์เฉพาะไม่ได้ทดสอบว่ามีการเชื่อมต่อกับเครือข่ายประเภทใด

PPS The Above ทำงานบน Ubuntu 12.04 / sys อาจไม่มีอยู่ใน distros อื่น ๆ ดูด้านล่าง:

การกระจาย Linux สมัยใหม่รวมถึงไดเร็กทอรี a / sys เป็นระบบไฟล์เสมือน (sysfs เทียบได้กับ / proc ซึ่งเป็น procfs) ซึ่งจัดเก็บและอนุญาตให้ปรับเปลี่ยนอุปกรณ์ที่เชื่อมต่อกับระบบในขณะที่ระบบปฏิบัติการ UNIX และ Unix แบบดั้งเดิมจำนวนมากใช้ / sys เป็นลิงก์สัญลักษณ์ไปยังแผนผังแหล่งเคอร์เนล [ต้องการอ้างอิง]

จาก Wikipedia https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard


1
ระวังตอนนี้! "ใช้cat /sys/class/net/wwan0/carrierไม่ได้กับ ubuntu 14.04 LTS
dotnetCarpenter

1
คุณอาจต้องการใส่2>/dev/nullหลังจากcat /sys/class/net/$interface/carrierเพื่อไม่ให้เกิดข้อผิดพลาดในกรณีที่เครือข่ายถูกปิดใช้งาน
jarno

25

สิ่งนี้ใช้ได้ทั้งบน MacOSX และ Linux:

#!/bin/bash

ping -q -w1 -c1 google.com &>/dev/null && echo online || echo offline

ยกเว้น osx ( ping: invalid option -- w)
avishayp

fping google.comหรือเพียงแค่fping 8.8.8.8ใช้เวทมนตร์ด้วยโบนัสคุณจะได้รับรหัสสถานะโดยไม่จำเป็นต้องทดสอบ (" google.com is alive") ...
Roger

9

ใน Bash ใช้ network wrapper ผ่าน/ dev / { udp , tcp } / host / port :

if : >/dev/tcp/8.8.8.8/53; then
  echo 'Internet available.'
else
  echo 'Offline.'
fi

( :คือ Bash no-op เพราะคุณแค่ต้องการทดสอบการเชื่อมต่อ แต่ไม่ประมวลผล)


7

ฉันเคยเขียนสคริปต์ก่อนหน้านั้นเพียงแค่ใช้เทลเน็ตเพื่อเชื่อมต่อกับพอร์ต 80 จากนั้นส่งข้อความ:

HTTP/1.0 GET /index.html

ตามด้วยลำดับ CR / LF สองลำดับ

หากคุณได้รับการตอบกลับ HTTP บางรูปแบบโดยทั่วไปคุณสามารถสมมติว่าไซต์ทำงานได้


3
ทำไมต้องคิดค้นล้อใหม่? curl และ wget ทั้งสองทำได้อย่างสมบูรณ์แบบ
Adam Rosenfield

6
เนื่องจากไม่สามารถใช้ wget และ curl ได้ตลอดเวลา (เช่นข้อ จำกัด ในสภาพแวดล้อมขององค์กร) Telnet เป็นส่วนมาตรฐานของ UNIX ทุกตัวตั้งแต่เวลา t = 0
paxdiablo

ใช่ Telnetting เป็นวิธีมาตรฐานในการทดสอบการเชื่อมต่อมาระยะหนึ่งแล้ว
PTBNL

2
จุดดีแม้ว่า wget จะค่อนข้างธรรมดา อีกทางเลือกหนึ่งคือ netcat (nc) แม้ว่าในกรณีนี้จะไม่มีการปรับปรุงใด ๆ กับ telnet
Adam Rosenfield

7

คำตอบอันดับต้น ๆ ขาดความจริงที่ว่าคุณสามารถเชื่อมต่อกับเกตเวย์เริ่มต้นของคุณได้อย่างเสถียร แต่นั่นไม่ได้หมายความว่าคุณสามารถเข้าถึงบางสิ่งบนอินเทอร์เน็ตได้โดยอัตโนมัติ OP ถามว่าเขา / เธอสามารถทดสอบการเชื่อมต่อกับโลกได้อย่างไร ดังนั้นฉันขอแนะนำให้แก้ไขคำตอบด้านบนโดยเปลี่ยน IP เกตเวย์เป็น IP ที่รู้จัก (xyzw) ซึ่งอยู่นอก LAN ของคุณ

ดังนั้นคำตอบจะกลายเป็น:

ping -q -w 1 -c 1 x.y.z.w > /dev/null && echo ok || echo error

นอกจากนี้ยังลบ backticks ที่ไม่ได้ใช้ออกเพื่อทดแทนคำสั่ง[1] [1]

หากคุณต้องการตรวจสอบให้แน่ใจว่าคุณเชื่อมต่อกับโลกก่อนที่จะเรียกใช้รหัสบางอย่างคุณสามารถใช้:

if ping -q -w 1 -c 1 x.y.z.w > /dev/null; then
    # more code
fi

6

ตรวจสอบให้แน่ใจว่าเครือข่ายของคุณอนุญาตให้มีการรับส่งข้อมูล TCP เข้าและออกจากนั้นคุณสามารถกลับสู่ IP สาธารณะของคุณด้วยคำสั่งต่อไปนี้

curl ifconfig.co

5

ดำเนินการคำสั่งต่อไปนี้เพื่อตรวจสอบว่าเว็บไซต์ขึ้นหรือไม่และข้อความสถานะใดที่เว็บเซิร์ฟเวอร์แสดง:

$ curl -Is http://www.google.com | head -1 HTTP/1.1 200 OK

รหัสสถานะ '200 OK' หมายความว่าคำขอประสบความสำเร็จและสามารถเข้าถึงเว็บไซต์ได้


2
การใช้งานที่ดีขึ้นอาจเป็นได้curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Luca Galasso

4

หากเซิร์ฟเวอร์ชื่อในเครื่องของคุณไม่ทำงาน

ping 4.2.2.1

เป็น IP ที่อัปเดตตลอดเวลาที่จดจำได้ง่าย (จริงๆแล้วเป็นเนมเซิร์ฟเวอร์ด้วยซ้ำ)


5
ping 8.8.8.8 (Google NS)
user3439968

4

ด้านบนได้รับการโหวตคำตอบไม่ทำงานสำหรับ MacOS ดังนั้นสำหรับผู้ที่อยู่ในแม็คที่ผมได้ประสบความสำเร็จในการทดสอบนี้

GATEWAY=`route -n get default | grep gateway`
if [ -z "$GATEWAY" ]
  then
    echo error
else
  ping -q -t 1 -c 1 `echo $GATEWAY | cut -d ':' -f 2` > /dev/null && echo ok || echo error
fi

ทดสอบบน MacOS High Sierra 10.12.6


2
เปลี่ยนrouteคำสั่งเป็นroute -n get default 2> /dev/null | grep gatewayเพื่อหลีกเลี่ยงการเขียนข้อผิดพลาดไปยัง stderr เมื่อออฟไลน์
devstuff

4

สคริปต์ทุบตีนี้ตรวจสอบอินเทอร์เน็ตอย่างต่อเนื่องและส่งเสียงบี๊บเมื่ออินเทอร์เน็ตพร้อมใช้งาน

#!/bin/bash
play -n synth 0.3 sine 800 vol 0.75
while :
do
pingtime=$(ping -w 1 8.8.8.8 | grep ttl)
if [ "$pingtime" = "" ] 
then 
   pingtimetwo=$(ping -w 1 www.google.com | grep ttl) 
   if [ "$pingtimetwo" = "" ] 
   then 
       clear ; echo 'Offline'
   else
       clear ; echo 'Online' ; play -n synth 0.3 sine 800 vol 0.75
   fi 
else
    clear ; echo 'Online' ; play -n synth 0.3 sine 800 vol 0.75
fi
sleep 1
done

3

วิธีที่สั้นที่สุด: fping 4.2.2.1=> "4.2.2.1 ยังมีชีวิตอยู่"

ฉันชอบสิ่งนี้เพราะมันเร็วกว่าและผลลัพธ์ที่ละเอียดน้อยกว่าpingข้อเสียคือคุณจะต้องติดตั้ง

คุณสามารถใช้DNS สาธารณะใด ๆแทนเว็บไซต์เฉพาะได้

fping -q google.com && echo "do something because you're connected!"

-q ส่งคืนรหัสทางออกดังนั้นฉันแค่แสดงตัวอย่างของการเรียกใช้สิ่งที่คุณออนไลน์

จะติดตั้งบน Mac: brew install fping; บน Ubuntu:sudo apt-get install fping


2

Ping ได้รับการออกแบบมาเพื่อทำสิ่งที่คุณต้องการทำ อย่างไรก็ตามหากไซต์บล็อก ICMP echo คุณสามารถทำ telnet ไปยังพอร์ต 80 ของบางไซต์ wget หรือ curl ได้ตลอดเวลา


2

การตรวจสอบหน้าดัชนีของ Google เป็นอีกวิธีหนึ่งที่สามารถทำได้:

#!/bin/bash

WGET="/usr/bin/wget"

$WGET -q --tries=20 --timeout=10 http://www.google.com -O /tmp/google.idx &> /dev/null
if [ ! -s /tmp/google.idx ]
then
    echo "Not Connected..!"
else
    echo "Connected..!"
fi

2

เช่นเดียวกับคำตอบของ @ Jesseตัวเลือกนี้อาจเร็วกว่าโซลูชันใด ๆ ที่ใช้pingและอาจมีประสิทธิภาพมากกว่าคำตอบของ @ Jesseเล็กน้อย

find /sys/class/net/ -maxdepth 1 -mindepth 1 ! -name "*lo*" -exec sh -c 'cat "$0"/carrier 2>&1' {} \; | grep -q '1'

คำอธิบาย:

คำสั่งนี้ใช้findกับ-execเพื่อรันคำสั่งบนไฟล์ทั้งหมดที่ไม่มีชื่อ*lo*ใน/sys/class/net/ . ลิงก์เหล่านี้ควรเป็นลิงก์ไปยังไดเร็กทอรีที่มีข้อมูลเกี่ยวกับอินเทอร์เฟซเครือข่ายที่มีอยู่ในเครื่องของคุณ

คำสั่งที่กำลังรันคือshคำสั่งที่ตรวจสอบเนื้อหาของไฟล์carrierในไดเร็กทอรีเหล่านั้น ค่าของ$interface/carrierมี 3 ความหมาย - การอ้างอิง :

ดูเหมือนว่ามีสามสถานะ:

  • ./carrier ไม่สามารถอ่านได้ (เช่นเมื่อปิดใช้งานอินเทอร์เฟซใน Network Manager)
  • ./carrier มี "1" (เมื่อเปิดใช้งานอินเทอร์เฟซและเชื่อมต่อกับเครือข่าย WiFi)
  • ./carrier มี "0" (เมื่อเปิดใช้งานอินเทอร์เฟซและไม่ได้เชื่อมต่อกับเครือข่าย WiFi)

ตัวเลือกแรกที่ไม่ได้รับการดูแลใน@ คำตอบของเจส shคำสั่งลายเอาต์คือ

# Note: $0 == $interface
cat "$0"/carrier 2>&1

catกำลังใช้เพื่อตรวจสอบเนื้อหาของcarrierและเปลี่ยนทิศทางเอาต์พุตทั้งหมดไปยังเอาต์พุตมาตรฐานแม้ว่าจะล้มเหลวเนื่องจากไฟล์ไม่สามารถอ่านได้ หากgrep -qพบ"1"ในไฟล์เหล่านั้นหมายความว่ามีการเชื่อมต่ออย่างน้อย 1 อินเทอร์เฟซ รหัสทางออกของgrep -qจะเป็นรหัสทางออกสุดท้าย

การใช้งาน

ตัวอย่างเช่นเมื่อใช้สถานะการออกของคำสั่งนี้คุณสามารถใช้คำสั่งนี้เพื่อเริ่มต้นgnubiffใน~/.xprofileกรณีที่คุณมีการเชื่อมต่ออินเทอร์เน็ตเท่านั้น

online() {
    find /sys/class/net/ -maxdepth 1 -mindepth 1 ! -name "*lo*" -exec sh -c 'cat "$0"/carrier 2>&1 > /dev/null | grep -q "1" && exit 0' {} \;
}
online && gnubiff --systemtray --noconfigure &

ข้อมูลอ้างอิง


1

Pong ไม่ได้หมายความว่าบริการเว็บบนเซิร์ฟเวอร์กำลังทำงานอยู่ เป็นเพียงหมายความว่าเซิร์ฟเวอร์ตอบกลับ ICMP echo ฉันอยากจะแนะนำให้ใช้ curl และตรวจสอบค่าส่งคืน


0

หากเป้าหมายของคุณคือการตรวจสอบการเข้าถึงอินเทอร์เน็ตจริง ๆคำตอบที่มีอยู่จำนวนมากสำหรับคำถามนี้มีข้อบกพร่อง บางสิ่งที่คุณควรทราบ:

  1. เป็นไปได้ที่คอมพิวเตอร์ของคุณจะเชื่อมต่อกับเครือข่ายโดยที่เครือข่ายนั้นไม่สามารถเข้าถึงอินเทอร์เน็ตได้
  2. เป็นไปได้ที่เซิร์ฟเวอร์จะหยุดทำงานโดยที่อินเทอร์เน็ตทั้งหมดไม่สามารถเข้าถึงได้
  3. เป็นไปได้ที่แคปทีฟพอร์ทัลจะส่งคืนการตอบกลับ HTTP สำหรับ URL ที่กำหนดเองแม้ว่าคุณจะไม่มีอินเทอร์เน็ตก็ตาม

ด้วยเหตุนี้ฉันจึงเชื่อว่ากลยุทธ์ที่ดีที่สุดคือการติดต่อหลายไซต์ผ่านการเชื่อมต่อ HTTPS และส่งคืนจริงหากไซต์เหล่านั้นตอบสนอง

ตัวอย่างเช่น:

connected_to_internet() {
  test_urls="\
  https://www.google.com/ \
  https://www.microsoft.com/ \
  https://www.cloudflare.com/ \
  "

  processes="0"
  pids=""

  for test_url in $test_urls; do
    curl --silent --head "$test_url" > /dev/null &
    pids="$pids $!"
    processes=$(($processes + 1))
  done

  while [ $processes -gt 0 ]; do
    for pid in $pids; do
      if ! ps | grep "^[[:blank:]]*$pid[[:blank:]]" > /dev/null; then
        # Process no longer running
        processes=$(($processes - 1))
        pids=$(echo "$pids" | sed --regexp-extended "s/(^| )$pid($| )/ /g")

        if wait $pid; then
          # Success! We have a connection to at least one public site, so the
          # internet is up. Ignore other exit statuses.
          kill -TERM $pids > /dev/null 2>&1 || true
          wait $pids
          return 0
        fi
      fi
    done
    # wait -n $pids # Better than sleep, but not supported on all systems
    sleep 0.1
  done

  return 1
}

การใช้งาน:

if connected_to_internet; then
  echo "Connected to internet"
else
  echo "No internet connection"
fi

หมายเหตุเกี่ยวกับแนวทางนี้:

  1. มันแข็งแกร่งเมื่อเทียบกับผลบวกเท็จและเชิงลบทั้งหมดที่ฉันระบุไว้ข้างต้น
  2. คำขอทั้งหมดเกิดขึ้นพร้อมกันเพื่อเพิ่มความเร็วสูงสุด
  3. มันจะส่งคืนเท็จหากคุณมีการเข้าถึงอินเทอร์เน็ตในทางเทคนิคแต่ DNS ไม่ทำงานหรือการตั้งค่าเครือข่ายของคุณยุ่งเหยิงซึ่งฉันคิดว่าเป็นสิ่งที่สมเหตุสมผลที่จะทำในกรณีส่วนใหญ่

ไม่ได้ทดสอบโค้ดส่งคืนจาก curl ในระบบของฉันหากเครือข่ายไม่พร้อมใช้งาน curl จะให้ rc = 6 (การแก้ปัญหา DNS ล้มเหลว) แต่รหัสนี้ยังคงรายงาน "เชื่อมต่อกับอินเทอร์เน็ต"
ceperman

@ceperman if wait $pid;รหัสตอบแทนสำหรับขดมีการทดสอบในบรรทัดที่จะกล่าวว่า ไม่รู้ว่าทำไมถึงไม่ทำงานในระบบของคุณ แน่ใจนะว่าใช้ทุบตี?
Ajedi32

@ceperman ความเป็นไปได้อีก; บางทีหนึ่งใน URL ในรายการที่อยู่ด้านบนสุดจะคืนความสำเร็จให้กับคุณแม้ว่าURL อื่น ๆ จะล้มเหลวในการแก้ไขชื่อ?
Ajedi32

2
bash ของฉันค่อนข้างwaitธรรมดาดังนั้นฉันจึงอ่านต่อและตอนนี้เข้าใจว่าโค้ดส่งคืนกำลังได้รับการทดสอบ ฉันคัดลอกรหัสของคุณอีกครั้งและวันนี้ก็ใช้ได้ - อ๊ะ! คราวที่แล้วฉันต้องทำอะไรบางอย่างวุ่นวายแม้ว่าฉันจะไม่เข้าใจว่าอะไรหรืออย่างไร อย่างไรก็ตาม mea culpa ขอโทษ.
ceperman


-1

สิ่งนี้เร็วกว่าโซลูชันใด ๆ ที่โพสต์ไว้ที่นี่อย่างเห็นได้ชัดและสามารถใช้เพื่อทดสอบโฮสต์เฉพาะได้ด้วย

เคล็ดลับคือการแก้ IP โดยใช้ตัวแก้ DNS ที่ยุ่งน้อยกว่าที่ใช้โดยping:

validateConnection () {
    host="${1}"
    ip=$(getent ahostsv4 "${host}" | awk '{ print $1 }' | head -n1)
    ping -c1 "${ip}" 2>&1 >"/dev/null"

    if [ "${?}" -ne 0 ]; then
        echo "No connection to: ${host}" >&2
        exit 1
    fi
}

2
แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป - จากรีวิว
David Buck

ไม่ได้ใช้กับสถานการณ์นี้โดยเฉพาะ
Alberto Salvia Novella
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.