1 คะแนน โดย GN⁺ 2025-04-11 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Susam Pal เปิด ลูปบี๊ปเปอร์ด้วย netcat บนเซิร์ฟเวอร์ Debian แบบ 24 ชั่วโมงให้ใครก็ได้เชื่อมต่อได้ และทุกครั้งที่มีการเชื่อมต่อเข้ามาก็จะตอบกลับ ok พร้อมส่งเสียงบี๊ปในเทอร์มินัล 4 ครั้ง
  • วันไลเนอร์นี้มีโครงสร้างให้รับการเชื่อมต่อด้วย nc จากนั้น for loop ที่ทำงานเบื้องหลังจะพิมพ์ อักขระกระดิ่ง แล้ว while loop ชั้นนอกจะสร้างโปรเซสใหม่ทันทีเพื่อรอรับการเชื่อมต่อถัดไป
  • ในการทดลองครั้งแรก มี การเชื่อมต่อ 4,761 ครั้ง ภายใน 24 ชั่วโมง ทำให้เกิดเสียงบี๊ปรวม 19,044 ครั้ง และสามารถเข้าร่วมได้จากไคลเอนต์หลากหลายแบบ เช่น เบราว์เซอร์, nc, curl, ssh, irssi
  • หลังจากนำบทความวันที่ 10 เมษายน 2025 ไปแชร์บน Hacker News ก็มีการบันทึก การเชื่อมต่อ 352,831 ครั้ง และที่อยู่ไคลเอนต์ไม่ซ้ำ 1,396 รายการภายใน 14 ชั่วโมง ทำให้จำนวนเสียงบี๊ปรวมพุ่งเป็น 1,411,324 ครั้ง
  • ในรอบที่สอง ไคลเอนต์ที่ไม่เปิดเผยตัวตน C0276 สร้างการเชื่อมต่อ 327,209 ครั้ง กินสัดส่วนทราฟฟิกส่วนใหญ่ และการถูกนำไปแสดงบน HN ก็ขยายสเกลของการทดลองเล่นสนุกเล็ก ๆ นี้อย่างมาก

บี๊ปเปอร์เทอร์มินัลที่สร้างด้วย netcat

  • การทดลองนี้ประกอบด้วย ลูป netcat ขนาดเล็กบนเซิร์ฟเวอร์ Debian ที่เปิดรับการเชื่อมต่อแบบสุ่ม
    • เมื่อไคลเอนต์เชื่อมต่อเข้ามา จะส่งข้อความ ok
    • ปิดการเชื่อมต่อทันที
    • ส่งเสียงบี๊ปในเทอร์มินัล 4 ครั้ง
  • คำสั่งที่ใช้มีดังนี้
while true; do (echo ok | nc -q 1 -vlp 8000 2>&1; echo; date -u) | tee -a beeper.log; for i in 1 2 3 4; do printf '\a'; sleep 1; done & done
  • คำสั่ง nc จะส่ง ok แล้วปิดการเชื่อมต่อ จากนั้น for loop ด้านในจะพิมพ์อักขระกระดิ่ง 4 ครั้งแบบ อะซิงโครนัส ในเชลล์ที่ทำงานเบื้องหลัง
  • while loop ด้านนอกจะเรียกโปรเซส nc ตัวใหม่อย่างรวดเร็วเพื่อให้สามารถรับการเชื่อมต่อครั้งถัดไปได้
  • ในเธรด HN มีการบอกไว้ว่าหากเชื่อมต่อมายังพอร์ต 8000 ด้วยวิธีใดก็ได้ จะเกิดเสียงบี๊ป 4 ครั้ง
    • ตัวอย่าง: เว็บเบราว์เซอร์
    • ตัวอย่าง: nc HOST 8000
    • ตัวอย่าง: curl HOST:8000
    • ตัวอย่าง: ssh HOST -p 8000
    • ตัวอย่าง: irssi -c HOST -p 8000

การพุ่งขึ้นของการเชื่อมต่อที่ขยายตัวสองครั้งจาก HN

  • การทดลองครั้งแรกเป็นการลองเล่นสนุกที่ตอบสนองต่อเธรด HN เกี่ยวกับระบบแจ้งเตือน DIY แปลก ๆ
    • การพูดคุยดั้งเดิมอยู่ใน HN thread
    • มีการเชื่อมต่อเกิดขึ้น 4,761 ครั้งใน 24 ชั่วโมง
    • แต่ละครั้งดัง 4 ครั้ง รวมเป็นเสียงบี๊ปในเทอร์มินัลทั้งหมด 19,044 ครั้ง
    • ข้อมูลอยู่ใน beeper.log
  • หลังจากแชร์บทความนี้บน Hacker News เมื่อวันที่ 10 เมษายน 2025 การเชื่อมต่อก็พุ่งขึ้นอีกครั้ง
    • มีการบันทึก 352,831 การเชื่อมต่อ ภายใน 14 ชั่วโมง
    • มีที่อยู่ไคลเอนต์ไม่ซ้ำ 1,396 รายการ
    • จำนวนเสียงบี๊ปรวมสูงถึง 1,411,324 ครั้ง
    • ข้อมูลอยู่ใน beeper2.log
  • ทราฟฟิกจำนวนมากในการทดลองครั้งที่สองดูเหมือนจะมาจาก ลูปไคลเอนต์แบบต่อเนื่อง ที่เชื่อมต่อเข้าหาลูปบี๊ปเปอร์ซ้ำ ๆ
    • ไคลเอนต์ที่ไม่เปิดเผยตัวตน C0276 สร้างการเชื่อมต่อมากที่สุดที่ 327,209 ครั้ง
    • C0595 ซึ่งแอ็กทีฟมากเป็นอันดับสอง ทำสถิติไว้ 6,771 ครั้ง
    • มีไคลเอนต์ 491 รายที่เชื่อมต่อเพียงครั้งเดียวเท่านั้น
    • จำนวนการเชื่อมต่อต่อไคลเอนต์อยู่ใน beeperclient2.log
  • รอบแรกเกิดการเชื่อมต่อ 4,761 ครั้งจากผู้อ่านบางส่วนที่เห็นเธรดคอมเมนต์ แต่รอบที่สองซึ่งขึ้นหน้าแรกของ HN ขยายเป็น 352,831 ครั้ง
  • การทดลองนี้ปิดท้ายลงในฐานะกิจกรรมเชิงคอมพิวติ้งที่เน้น การสำรวจไอเดียประหลาด และความสนุกจากการที่คนอื่นเข้ามามีส่วนร่วม มากกว่าการแก้ปัญหา

1 ความคิดเห็น

 
GN⁺ 2025-04-11
ความคิดเห็นบน Hacker News
  • เจ๋งดี รู้ตัวเหมือนกันว่าตัวเองย้อนแย้ง; พูดว่าที่เขียนบล็อกก็เพราะชอบ และการกลายเป็น ทาสของตัวชี้วัดวิเคราะห์ นั้นแย่มาก แต่เอาเข้าจริงพอเห็นโปรเจกต์ที่ใช้เวลาหลายชั่วโมงทำมีคนแห่เข้ามาดู ฟีดแบ็กทันทีแบบนั้นมันรู้สึกดีมาก
    สุดท้ายเลยติด ตัวนับผู้เข้าชม แบบง่าย ๆ ไว้บนไซต์ เพื่อเติมเต็มความต้องการการยอมรับ โดยไม่ต้องไปไกลถึงเครื่องมือวิเคราะห์เต็มรูปแบบ มันไม่ส่งเสียงปี๊บ แต่บางทีมันอาจควรส่งก็ได้

    • เพื่อพิสูจน์ว่าผมเสื่อมถอยแค่ไหน ผมเพิ่งสร้าง เชลล์สคริปต์บรรทัดเดียว ที่ส่งเสียงปี๊บเมื่อเคาน์เตอร์ผู้เข้าชมตอบสนอง
      tail -F -n 0 /var/log/visitlog | while read ; do printf '\a' ; done
      ตอนนี้ก็แค่ต้องมีใครสักคนมาเยี่ยมไซต์ผม
    • ผมก็ทำคล้าย ๆ กัน ไม่อยากพราก ความเป็นส่วนตัว ของผู้ใช้ไป เลยทำเคาน์เตอร์ง่าย ๆ เองในปี 2022 และเขียนในบล็อกเกี่ยวกับ Raspberry Pi 400 ในห้องนอนของผม
      เพิ่งดาวน์โหลดไฟล์เสียงคลิกมา กำลังจะลองใส่ดูว่าผมจะคลั่งไหม
      https://joeldare.com/private-analtyics-and-my-raspberry-pi-4...
    • ผมสงสัยว่าทำไม การอยากได้รับการยอมรับ สำหรับผลงานที่ใช้เวลาหลายชั่วโมงถึงรู้สึกเหมือนเป็นเรื่องไม่ดี
    • สมัยก่อนตอนรันไซต์ด้วยหน้า PHP ที่ทำเอง ผมมี ตัวนับผู้เข้าชม ที่ภายในใช้ไฟล์ข้อความธรรมดา ๆ มันได้ผลดีอย่างคาดไม่ถึง และเป็นประสบการณ์ที่สนุกดี
  • คอมเมนต์ที่ไม่ค่อยมีใครรู้จัก ของผม ซึ่งถูกฝังอยู่ในเธรด HN ธรรมดา ๆ ถูกเอาไปใส่ในบทความด้วย \o/

    • แสดงให้เห็นว่าแม้แต่คอมเมนต์ที่ถูกฝังลึกมากก็ยังสร้างยอดดูได้เป็นพัน ๆ ครั้ง จริง ๆ แล้วคงมีแค่บางส่วนของคนที่อ่านคอมเมนต์ที่ตอบสนอง แต่แค่บางส่วนนั้นก็เกิน 4,000 คนแล้ว ทำให้มุมมองเปลี่ยนไปเลย
  • ไม่ควรไปกดระฆังของ Susam แต่ควรดู Fish Doorbell ต่างหาก แค่คอยแจ้งเมื่อเห็นปลารอจะผ่านไป
    https://visdeurbel.nl/en/

    • Fish Doorbell น่าจะเป็น กรณีใช้งาน AI ที่ยอดเยี่ยม แต่ผมอยากอยู่ในโลกที่เมื่อปลาอยากผ่านไป อาสาสมัครจะดูวิดีโอแล้วกดกระดิ่งเอง
  • ตลกดี เห็นได้เลยว่าตอนนี้ค่อนข้างเป็นที่รักมาก
    while true; do; sleep 5; curl http://susam.net:8000 ; done
    curl: (1) Received HTTP/0.9 when not allowed
    curl: (1) Received HTTP/0.9 when not allowed
    curl: (7) Failed to connect to susam.net port 8000 after 11 ms: Couldn't connect to server
    curl: (56) Recv failure: Connection reset by peer
    curl: (7) Failed to connect to susam.net port 8000 after 8 ms: Couldn't connect to server
    curl: (1) Received HTTP/0.9 when not allowed
    curl: (7) Failed to connect to susam.net port 8000 after 8 ms: Couldn't connect to server
    curl: (1) Received HTTP/0.9 when not allowed
    curl: (7) Failed to connect to susam.net port 8000 after 10 ms: Couldn't connect to server
    curl: (7) Failed to connect to susam.net port 8000 after 11 ms: Couldn't connect to server
    curl: (56) Recv failure: Connection reset by peer
    curl: (56) Recv failure: Connection reset by peer
    curl: (1) Received HTTP/0.9 when not allowed

    • คุณช่วยสถานการณ์นี้ได้ดีจริง ๆ นะ…
    • ควรเพิ่ม แฟล็ก --http0.9 ให้ curl มันจะบอกได้ว่าการตอบกลับที่มีแค่ "ok" คือรูปแบบ HTTP 0.9 ที่มีแต่ body ไม่มี header และไม่ใช่ข้อผิดพลาด
    • คราวหน้าลองใช้ watch -n 5 ดูได้
  • “สุดท้ายแล้วนี่เป็นการทดลองที่สนุก ไร้ประโยชน์แต่สนุก!”
    การทดลองแบบนี้แหละดีที่สุด บางครั้งมันก็นำไปสู่ นวัตกรรม การประดิษฐ์ ความก้าวหน้าทางการแพทย์ อันยิ่งใหญ่ และความสนุกที่มากขึ้น

    • เคยได้ยินประโยคว่า “ไร้ประโยชน์ไม่ได้แปลว่าไร้คุณค่า” ซึ่งเป็นประโยคที่ผมชอบมากจริง ๆ
    • วันหนึ่งก็แค่พยายามดูว่ามี กาแฟสด อยู่ในห้องพักท้ายโถงหรือเปล่า แต่วันถัดมากลับกลายเป็นการประดิษฐ์เว็บแคม
      https://en.m.wikipedia.org/wiki/Trojan_Room_coffee_pot
  • มี Peep (The Network Auralizer) ซึ่งเป็นเวอร์ชันที่พัฒนากว่าและเก่าแก่ตั้งแต่ปี 2000 ของไอเดียนี้: เครื่องมือเฝ้าดูเครือข่ายด้วยเสียง [1]
    เมื่อก่อนผมเคยเปิดใช้เป็นเวลาหลายเดือน ห้องนั่งเล่นฟังดูเหมือนป่าเลย ถ้าใช้การตั้งค่าเดิมกับปริมาณทราฟฟิกที่เพิ่มขึ้นในยุคนี้ คงฟังดูเหมือนประตูนรกมากกว่า
    ยังหาได้บน SourceForge แต่อาจต้องปรับแต่งสักหน่อย หรือใช้ VM ที่รัน Linux distro เก่า ๆ
    https://sourceforge.net/projects/peep/
    [1] https://www.usenix.org/legacy/publications/library/proceedin...

  • ราวปี 1998 มีกลุ่มหนึ่งที่กำลังหาบุคลากรด้านเทคโนโลยีใหม่ ๆ ให้สตาร์ทอัพที่พวกเขาลงทุนไว้ น่าจะไปโพสต์ในที่อย่าง /. ว่าจะรับเรซูเม่ผ่าน SMTP บนพอร์ตที่ไม่เป็นมาตรฐาน แล้วใช้มันเป็นกลไกคัดกรอง
    ผมไม่ได้รับคำตอบ แต่ท้ายที่สุดในปีถัดมาก็ได้ไปทำงานที่หนึ่งในบริษัทที่พวกเขาลงทุนไว้

    • ช่วงเวลาใกล้ ๆ กัน ก็มีกรณีที่ใส่ประกาศรับสมัครงานไว้ใน ซอร์ส HTML ของเว็บไซต์ด้วย ตอนนั้นผมไม่ได้หางานสายเทคนิคเลยไม่ได้สมัคร แต่คิดมาตลอดว่าเป็นไอเดียที่ฉลาด
      พวกเนิร์ดที่สนใจเว็บดีเวลลอปเมนต์จะกด “View Source” อยู่ตลอดในทุกหน้าที่น่าสนใจ นั่นเป็นช่องทางหลักที่เทคนิคเว็บฟรอนต์เอนด์ยุคแรก ๆ แพร่กระจาย และมันยอดเยี่ยมจริง ๆ เราสามารถคัดลอก HTML ไปวาง ดาวน์โหลด .css และทรัพยากรอื่น ๆ เอง แล้วรันแบบจำลองเว็บไซต์แบบออฟไลน์เพื่อเรียนรู้ความลับได้ เวทมนตร์ทั้งหมดเปิดเผยอยู่ตรงหน้า และถ้าคุณแค่เต็มใจเปิดม่านดู อนาคตก็ดูเหมือนจะเปิดกว้างไม่สิ้นสุด
    • ผมจำได้ว่ามีบริษัทหนึ่งประกาศรับสมัครงานผ่าน DNS ในลักษณะคล้ายกัน น่าจะมีระเบียน TXT ที่บอกวิธีสมัครจริง ๆ
    • สงสัยว่าพอร์ตนั้นมีเอกสารระบุไว้ไหม หรือว่าต้องสแกนหาเอง
  • วันนี้ได้เรียนรู้ว่า การตอบกลับ HTTP/0.9 ที่ให้มาเป็นข้อความล้วนโดยไม่มีเฮดเดอร์ ยังใช้งานได้ในเบราว์เซอร์สมัยใหม่ เจ๋งดี

    • ขอให้เป็นแบบนั้นตลอดไป มีประโยชน์กับโปรเจกต์เล็ก ๆ
  • เกี่ยวข้องกันเล็กน้อย ผมเคยทำทราฟฟิก HN ที่ได้รับจากโพสต์อันดับ 1 ให้เป็น แอนิเมชัน
    https://idiallo.com/blog/surviving-the-hug-of-death ขอโทษที่ไม่ค่อยเป็นมิตรกับมือถือ
    บอตเยอะจนน่าตกใจ ถ้าคราวหน้าได้ทราฟฟิกจาก HN ลองตั้งอะไรแบบนี้ดูน่าจะสนุก

    • “ตอนแรกผมสู้ด้วยมือเองและป้อนข้อมูลปลอมให้มัน แต่ก็เบื่ออย่างรวดเร็ว เลยปล่อยอาวุธลับของผมออกมา นั่นคือ zip bomb เมื่อบอตเข้ามาที่ไซต์ของผม ผมจะส่งไฟล์บีบอัดเล็ก ๆ ให้ แล้วเซิร์ฟเวอร์ของพวกมันก็ดาวน์โหลดและแตกไฟล์อย่างขยันขันแข็ง จนปล่อยความโกลาหลขนาดหลายกิกะไบต์ออกมา ตูม จบ”
      แต่สงสัยว่าเขารู้ได้อย่างไรว่าบอตพวกนั้นจะแตกไฟล์ ถ้าเป็นบอต ผมนึกว่ามันคงแค่คัดลอกเนื้อหา HTML กับรูปภาพของบทความไปแปะในไซต์ตัวเอง ไม่น่ามีเหตุให้แก้ไขไฟล์หรือแตกไฟล์
      แอนิเมชันน่าประทับใจ และจำนวนบอตก็เยอะมหาศาล
  • ดูจากที่ http://susam.net:8000 หยุดตอบสนองแล้ว วันนี้น่าจะมี เสียงปี๊บ ดังขึ้นอีกเยอะมาก

    • ลองประมาณ 14 ครั้ง ได้ ok มา 2 ครั้ง ;)
    • นี่ไม่ใช่ HTTP server ถ้าลองด้วยอย่าง nc หรือ telnet จะได้รับการตอบกลับ ok ก่อนการเชื่อมต่อถูกตัด
      telnet -4 susam.net 8000