เป็นไปได้ไหมที่จะส่ง Ping ไปยังที่อยู่: พอร์ต?


212

ฉันไม่ได้เข้าสู่เครือข่ายและฉันมีคำถามต่อไปนี้ที่เกี่ยวข้องกับคำสั่งping Linux

ฉันสามารถ ping ที่อยู่ได้หรือไม่ ตัวอย่างเช่น:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

หรือฉันสามารถ ping ที่อยู่: พอร์ตตัวอย่างเช่น: onofri.org:80 ?

ถ้าฉันลองอันนี้มันไม่ทำงาน:

miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80

มันเป็นสิ่งที่เป็นไปได้ ping เช่นที่อยู่: พอร์ต ? ถ้าเป็นไปได้เหตุใดฉันจึงไม่ลองทำงาน


8
คุณพยายามทำอะไรให้สำเร็จ การตรวจสอบการทำงานของบริการที่ถูกต้องนั้นคุณจะต้องสอบถามบริการและประเมินการตอบสนอง ตัวอย่างเช่นเว็บเซิร์ฟเวอร์สามารถยอมรับการเชื่อมต่อของคุณ แต่กลับข้อผิดพลาดเนื่องจากการกำหนดค่าผิดพลาด
Daniel B

5
นั่นเป็นส่วนหนึ่งของสิ่งที่ฉันชอบเกี่ยวกับ Telnet คุณสามารถเชื่อมต่อกับเว็บเซิร์ฟเวอร์และพิมพ์GET /index.html HTTP\1.1และดู 200 การตอบสนอง (หรือรหัสข้อผิดพลาด) พร้อมกับมาร์กอัปผลลัพธ์
แฟรงค์โธมัส

7
@ Frankthomas HTTP\1.1? จริงๆ?
glglgl

5
@Navin อาจจะHTTP/1.1...
glglgl

3
@glglgl; อะไร? คุณไม่เคยแฮ็คที่สแลชควรไปใช่ไหม? แต่คุณถูกต้องควรเป็นเครื่องหมายทับ
Frank Thomas

คำตอบ:


20

คุณสามารถใช้Papingการทดสอบพอร์ต TCP ข้ามแพลตฟอร์มจำลองการทำงานของ ping (ping พอร์ต)

(โปรดดูGithubในฐานะ code.google.com ได้ถูกคิดค่าเสื่อมราคาแล้ว)

paping -p 80 google.com

8
คำอธิบายบางอย่างเกี่ยวกับสิ่งที่โปรแกรมนี้จะมีประโยชน์
David Schwartz

16
สำหรับใครก็ตามที่พบคำตอบนี้อย่างที่ฉันเคยทำเพียงเพื่อหา paping ไม่ได้อยู่ในที่เก็บใด ๆ และเป็นรหัสโบราณที่ไม่แม้แต่จะรวบรวมบน ARM - เลื่อนลงไปไกลกว่าคำตอบ 'hping' มันเป็น drop-in ที่สมบูรณ์แบบสำหรับ ping เมื่อคุณต้องการทดสอบพอร์ตและสามารถเข้าถึงได้ง่ายใน repositories ต่างๆ (เช่น Ubuntu, Arch) รวมถึง ARM
มาร์ค

ฉันจะติดตั้งได้papingอย่างไร ฉันเคยไปที่ repo แล้ว แต่ไม่มีการเผยแพร่ Ah, ไม่เป็นไร .. รหัส google ไม่สามารถเข้าถึงได้สำหรับฉันในเวลานั้น
Shayan

310

พอร์ตแนวคิดของUDPและTCP ข้อความปิงจะได้ในทางเทคนิคเรียกว่าICMP Echo RequestและICMP Echo Replyซึ่งเป็นส่วนหนึ่งของICMP ICMP, TCP และ UDP คือ "พี่น้อง"; พวกเขาไม่ได้ขึ้นอยู่กับแต่ละอื่น ๆ แต่เป็นสามโปรโตคอลแยกต่างหากที่ทำงานบน IP

ดังนั้นคุณไม่สามารถpingพอร์ต สิ่งที่คุณสามารถnmapทำคือการใช้เครื่องสแกนพอร์ตเช่น

nmap -p 80 onofri.org

นอกจากนี้คุณยังสามารถใช้telnet onofri.org 80ตามคำแนะนำในคำตอบอื่น ๆ (มันจะให้ข้อผิดพลาดหากพอร์ตถูกปิดหรือกรอง)


22
+1 คุณเข้าใจถูกต้อง ICMP ถูกสร้างขึ้นบน IP ซึ่งมีแนวคิดของที่อยู่ IP แต่ไม่ใช่พอร์ต TCP และ UDP นั้นอยู่เหนือ IP และเป็นโปรโตคอลที่เพิ่ม "พอร์ต" ICMP, TCP และ UDP ทั้งหมดอยู่ที่ "ระดับ" เดียวกันในแง่ของโปรโตคอลที่ดำเนินการโดย
Jason C

14
+1 หลายคนคิดว่าถ้าพวกเขาไม่สามารถ ping สิ่งที่พวกเขาไม่สามารถเชื่อมต่อกับมัน ... แต่อย่างที่คุณพูด ICMP นั้นแตกต่างจาก TCP และ UDP: ถ้าคุณตั้งใจจะให้บริการพูดเว็บเพจบน TCP 80 เกินกว่าที่คุณจะต้องเปิด TCP 80 บนไฟร์วอลล์เท่านั้นไม่มีอะไรอื่น (ดังนั้น Ping ไปยัง IP เดียวกันสามารถ (... ควร!) ถูกบล็อกเป็นต้น)
Olivier Dulac

6
เพียงเพื่อให้ข้อมูลมีความถูกต้อง ICMP ไม่ใช่โปรโตคอลเลเยอร์การส่งผ่านเช่น TCP หรือ UDP เช่นเดียวกับโปรโตคอลจำนวนมากมันไม่เหมาะกับโมเดลแนวคิดเครือข่ายทั้งหมด แต่โดยทั่วไปถือว่าเป็นโปรโตคอลเลเยอร์เครือข่าย / Internetwork เช่นเดียวกับ IP บางครั้งมันก็ถูกเรียกว่าโปรโตคอล L3.5
YLearn

2
@BenjiWiebe เห็นด้วย แต่อีกครั้งเพื่อความถูกต้องคำสั่งควรทำซึ่งเป็นเหตุผลที่ฉันเพิ่มมัน สิ่งที่กล่าวมาทั้งหมดนั้นเกี่ยวข้องกับ ICMP, TCP และ UDP ความคิดเห็นที่ได้รับการโหวตสูงสุดแม้จะพูดได้ว่าพวกเขาทั้งหมดนั้นอยู่ในระดับเดียวกัน แม้ว่าสิ่งนี้จะไม่สร้างความแตกต่างให้กับผู้ใช้ทั่วไป แต่ก็มีผู้ใช้ที่ไม่ได้เยี่ยมชมเว็บไซต์นี้เป็นจำนวนมาก
YLearn

4
@OlivierDulac ฉันไม่ทราบว่าคุณควรบล็อกหรือไม่ เว็บเซิร์ฟเวอร์ส่วนใหญ่ที่ฉันรู้ว่าเปิดทิ้งไว้ ICMP ทำให้อินเทอร์เน็ตดำเนินไปได้ ทำไมคุณถึงต้องการให้คนคิดว่าพวกเขาไม่สามารถติดต่อคุณได้ถ้าพวกเขาทำได้?
Cruncher

86

ฉันใช้Telnetเนื่องจากมีอยู่ในแพลตฟอร์มจำนวนมากโดยไม่มีการดาวน์โหลดเพิ่มเติม

เพียงใช้คำสั่ง telnet เพื่อเชื่อมต่อกับพอร์ตที่คุณต้องการทดสอบ หากคุณได้รับข้อความด้านล่างหรือข้อความจากบริการของตัวเองแสดงว่าพอร์ตยังมีชีวิตอยู่

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

หากคุณทราบลำดับคำสั่งสำหรับบริการที่คุณกำลังเชื่อมต่อคุณสามารถพิมพ์คำสั่ง ( HTTP / FTP GETเป็นต้น) และสังเกตการตอบสนองและผลลัพธ์ในเทอร์มินัล สิ่งนี้มีประโยชน์มากสำหรับการทดสอบบริการเนื่องจากจะแสดงข้อมูลข้อผิดพลาดที่ส่งถึงลูกค้าเช่นข้อผิดพลาด HTTP 500

หากคุณได้รับข้อความว่าการเชื่อมต่อถูกปฏิเสธพอร์ตจะถูกปิด

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

8
นอกจากนี้หากหน้าจอเป็นสีดำสนิทแสดงว่าคุณกำลังเชื่อมต่อด้วย
Tensigh

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

@Brandon ชอบเมื่อ sshing เป็นเครื่องจักร dev ^. ^
Cruncher

เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ในเบราว์เซอร์นั้นง่ายกว่ามากเพราะพวกเขาจะยังคงส่งส่วนหัวคำขอ HTTP ที่เหมาะสมทั้งหมด แต่คุณสามารถตรวจสอบการตอบสนอง HTTP แบบเต็มได้ จากนั้นอีกครั้งหากคุณต้องการปรับแต่งการร้องขอด้วยเช่นกัน telnet เป็นวิธีที่จะไป
การแข่งขัน Lightness ใน Orbit

ฉันคิดว่าคำตอบทั้งหมดที่นี่พลาดข้อมูลที่สำคัญที่สุด ในทางเทคนิคแล้วจะไม่สามารถ "ping" พอร์ตดังนี้ได้หรือไม่ คุณสามารถสร้างการเชื่อมต่อ TCP / UDP และนับจำนวนมิลลิวินาทีที่ใช้ในการสร้างการเชื่อมต่อ
David

47

ใช่ใช้HPingเพื่อทำสิ่งนี้:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

โปรดทราบว่ามันต้องมีสิทธิ์รูต (หรือความสามารถของ SELinux) เพื่อสร้างแพ็กเก็ต IP ดิบเช่นเดียวกับ ping (ซึ่งเป็นไปได้มากที่ suid บนระบบของคุณ)


3
ฉันหวังว่านี่คือ "คำตอบที่ยอมรับ" hping หาได้ง่ายใน repos หลาย ๆ อันไม่เหมือนกับ paping ซึ่งเป็นรหัส crufty โบราณที่ไม่ได้คอมไพล์บน ARM นอกจากนี้ยังแตกต่างจาก NMAP การที่ haping ส่งคืนรหัสสถานะที่สามารถทดสอบได้ง่ายจากเชลล์สคริปต์ดังนั้นจึงเป็นสิ่งทดแทนที่สมบูรณ์แบบสำหรับการใช้งาน ping ขอบคุณสำหรับคำตอบนี้ความอับอายที่ฉันไม่ได้เลื่อนลงมามากพอที่จะเห็นมันและต้องไปหามันจากเว็บไซต์อื่นแทน
มาร์ค

ฉันไม่สามารถติดตั้ง hping ใน Ubuntu .. ไม่พบแพคเกจ .. แต่ฉันได้พบhping3มันเหมือนกันhping3หรือไม่ @ d33tah
Shayan

โอเคฉันพยายามhping3แล้วมันส่ง Ping ไปที่พอร์ตทั้งหมด .. ไม่สำคัญว่าปิดหรือเปิด .. ฉันจะรู้ได้อย่างไรว่าพอร์ตนั้นปิดหรือเปิด?
Shayan

46

คุณสามารถใช้ netcat เพื่อเชื่อมต่อกับพอร์ตเฉพาะเพื่อดูว่าคุณได้รับการเชื่อมต่อหรือไม่ แฟล็ก -v จะเพิ่ม verbosity เพื่อแสดงว่าพอร์ตเปิดหรือปิด แฟล็ก -z จะทำให้ netcat หยุดทำงานเมื่อมีการเชื่อมต่อ คุณสามารถใช้รหัสออกผ่านทาง $ ได้หรือไม่ เพื่อดูว่ามีการสร้างการเชื่อมต่อหรือไม่

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

นอกจากนี้คุณสามารถใช้ mtr พร้อมกับแฟล็ก -T สำหรับ tcp และแฟล็ก -P เพื่อระบุพอร์ต สิ่งนี้จะทำสิ่งที่คล้ายกับ traceroute ผ่าน TCP แทนที่จะเป็นเพียง ICMP อย่างไรก็ตามนี่อาจเกินความเป็นจริง

ถอนหายใจ ฉันต้องแก้ไขเพื่อเพิ่มบิตนี้เนื่องจากเราไม่สามารถใส่รหัสในความคิดเห็น Knoppix อาจทำอะไรบางอย่างที่แตกต่างกับเวอร์ชั่นของ netcat แต่นี่คือสิ่งที่ฉันได้จาก Linux Mint

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]

ปัญหาคือถ้าคุณลองnc -z www.google.com 8000 มันอาจใช้เวลานาน - 5 วินาทีบวก ถ้าฉันทำ-w 1แล้วมันใช้เวลา 5 วินาที ถ้าฉันทำเช่น-w 3นั้นจะใช้เวลานานกว่า 3 เท่า .. เคอร์เซอร์ 15 กะพริบ 15 วินาที -w 1ถูกกำหนดให้เป็นหนึ่งวินาที แต่ผ่านการทดสอบบน cygwin.,. 5 วินาที มันเร็วมากเมื่อมีเซิร์ฟเวอร์บนพอร์ต แต่จะช้าไปนิดหน่อยเมื่อไม่มี
barlop

สาปแช่งไม่มีการขึ้นบรรทัดใหม่ในความคิดเห็น ... ดูเหมือนว่าจะเป็นข้อผิดพลาดกับ cygwin การทดสอบกับ linux Mint แสดงให้เห็นถึงความล่าช้าอย่างไรก็ตามระบุไว้หลายวินาที วิ่งเพื่อทดสอบ: date; nc-zw5 www.google.com 8000; date
Falsenames

ฉันยังโหวตขึ้น @BenjiWiebe ด้วยคำขอ nmap NC ง่ายกว่าที่จะใส่ลงในสคริปต์ แต่จะง่ายกว่ามากเมื่อใช้ nmap แบบเห็นภาพ
Falsenames

ลองเป็น knoppix nc -zv -w 1 www.google.com คุณจะทำให้ลองได้ครั้งเดียวได้อย่างไร เมื่อฉันลองใช้มันใช่ -w 1 ใช้ได้ แต่ทุก ๆ วินาทีมันจะลองจนกว่าฉันจะกด Ctrl-C
barlop

ไม่แน่ใจว่า 'nc -zv -w 1 รุ่น Knoppix www.google.com 80' กำลังทำอะไร ใช้งานได้ดีกับระบบของฉันค้นหาหนึ่งครั้งและลดลงเหมือน -z ควรทำ นอกจากนี้หากไม่มีหมายเลขพอร์ตที่ระบุไว้ Mine ก็ไม่สามารถระบุได้ว่าไม่มีพอร์ตที่ระบุ
Falsenames

18

คุณสามารถใช้nping(ส่วนหนึ่งของnmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds

6
nping --tcp -p 80 localhost
K-Gun

ฉันทดสอบพอร์ตใด ๆ (พอร์ตที่ไม่ได้เปิด) และฉันยังคงได้รับการจับสองครั้งตลอดเวลา ...
Shayan

8

คุณสามารถทำสิ่งนี้ได้ในเชลล์โดยใช้ Python ในการซับแบบสั้น ๆ :

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSED; }
$ portping 8.8.8.8 54
CLOSED
$ portping 8.8.8.8 53
OPEN

7

เพียงเพื่อการอ้างอิงต้องการแบ่งปันโพสต์โดย Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# แสดงความคิดเห็น-920398

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

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

หรือรุ่นที่ง่ายมาก: เพียงดูผลลัพธ์ของรูปแบบคำสั่งต่อไปนี้:

echo >/dev/{tcp|udp}/{host}/{port}

มีประโยชน์เมื่อทำงานกับภาชนะบรรจุนักเทียบท่าแบบสุ่ม


looking at the output- ตรวจสอบรหัสส่งคืน$?เท่านั้นที่จะเป็นประโยชน์ นอกจากนี้ยังแขวนอยู่บนพอร์ตปิดอาจจะหมดเวลาบางส่วนสามารถกำหนดค่าได้ทุกที่ ...
vp_arth

วิธีนี้ดูเรียบร้อย แต่echo >/dev/tcp/{hostname}/{portnumber}จะไม่เสร็จสิ้นเมื่อปิดพอร์ต และecho >/dev/tcp/{hostname}/{portnumber}ไม่แสดงอะไรเลยแม้ว่าพอร์ตจะเปิดอยู่และฉันสามารถดูได้จากเบราว์เซอร์
miguelmorin

สวัสดีคุณ mmorin คุณใช้ระบบปฏิบัติการอะไร บน Ubuntu มันจะทำงานตามที่คาด: Connection refusedถ้าพอร์ตถูกปิดฉันได้รับ มิฉะนั้นจะไม่แสดงอะไรเลยและecho $?แสดงรหัสออก1
Jacek

3

ฉันเพิ่มwatchเครื่องมือที่นี่:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com   Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT     STATE  SERVICE
22/tcp open   ssh
80/tcp closed http

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

3

มันง่ายด้วย nmap

ตัวอย่าง:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

สำหรับข้อมูลเพิ่มเติมดูที่:

พิมพ์ในบรรทัดคำสั่งนี้: man nmap

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/


1

คุณกำลังพยายามทดสอบการสื่อสารหรือรับการตอบสนองจากพอร์ต 80 บนโหนดนั้นหรือไม่? PINGจะพยายามสร้างการสื่อสารไปยังโฮสต์เฉพาะผ่าน ICMP ซึ่งไม่มีส่วนเกี่ยวข้องกับพอร์ต

ลองใช้http://nmap.org/แทนเพื่อตรวจสอบข้อมูลพอร์ตและทดสอบการสื่อสาร:

nmap -v -p 80 onofri.org

1
ไม่แน่ใจว่าคุณใช้ nmap เวอร์ชันใดอยู่ ในระบบของฉันมันต้องใช้ -v และ -p เพื่อแยกเช่น 'nmap -v -p 80 onofri.org' นี่เป็นเพราะ -v และ -vv หมายถึงสิ่งที่แตกต่างกัน -v ใช้ v มากขึ้นเป็นอาร์กิวเมนต์
Falsenames
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.