คู่มือและวิธีการแก้ไขปัญหาพอร์ต 127.0.0.1:57573 Localhost

คู่มือและวิธีการแก้ไขปัญหาพอร์ต 127.0.0.1:57573 Localhost

รันสคริปต์ Flask ขนาดเล็ก วาง `http://127.0.0.1:57573` ลงในเบราว์เซอร์ ผลลัพธ์จะมีสองอย่าง คือ หน้าเว็บโหลด หรือเทอร์มินัลจะแสดงไฟสีแดงพร้อมข้อความ `ECONNREFUSED` และเบราว์เซอร์จะแสดงไอคอนรูปปลั๊กที่ถูกตัดการเชื่อมต่อ

ผลลัพธ์ทั้งสองอย่างนั้นไม่ลึกลับ ที่อยู่ดังกล่าวประกอบด้วยสองส่วน: 127.0.0.1 คือลูปแบ็ก IPv4 และ 57573 คือพอร์ตที่ระบบปฏิบัติการเลือกมาแบบสุ่มจากกลุ่มพอร์ตที่มีความถี่สูง คู่มือนี้จะไขความลับของทั้งสองส่วน เราจะดูว่าทำไมเซิร์ฟเวอร์ภายในจำนวนมากจึงใช้พอร์ตแบบนี้ และจะอธิบายถึงปัญหาต่างๆ ที่เกิดขึ้นก่อนที่การเชื่อมต่อจะเปิดขึ้น เมื่ออ่านจบแล้ว คุณควรจะรู้วิธีการผูกบริการเข้ากับอินเทอร์เฟซที่ถูกต้อง ดูว่ามีอะไรกำลังรอรับการเชื่อมต่อบนพอร์ตนั้นอยู่บ้าง แก้ไขปัญหาพอร์ตขัดแย้งและการบล็อกของไฟร์วอลล์ และรักษาความปลอดภัยของเซิร์ฟเวอร์ภายในก่อนที่จะเปิดให้สาธารณะเข้าถึงได้

127.0.0.1:57573 หมายความว่าอย่างไรในภาษาที่เข้าใจง่าย

ประกอบด้วยสามส่วน ที่อยู่ IP 127.0.0.1 คือ IPv4 loopback เครื่องหมายโคลอนหมายถึง "และบนพอร์ตนี้" 57573 คือพอร์ตนั้นเอง ซึ่งอยู่ในช่วงหมายเลขสูงๆ ที่ไม่มีบริการใดๆ ที่ใช้งานอย่างแพร่หลายเป็นเจ้าของอย่างถาวร

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

การจองนี้มีอายุเก่าแก่กว่านักพัฒนาส่วนใหญ่ที่ใช้งานอยู่ RFC 1122 ส่วนที่ 3.2.1.3 ได้กำหนดให้บล็อก 127.0.0.0/8 ทั้งหมด 16,777,216 ที่อยู่ ไม่สามารถใช้งานบนเครือข่ายได้อีกต่อไปตั้งแต่ปี 1989 IANA IPv4 Special-Purpose Address Registry ซึ่งควบคุมโดย RFC 6890 และได้รับการปรับปรุงโดย RFC 8190 ได้ทำเครื่องหมายบล็อกเดียวกันนี้ว่าไม่สามารถส่งต่อได้ ไม่สามารถกำหนดเส้นทางได้ทั่วโลก และถูกสงวนไว้โดยโปรโตคอล กระบวนการใดๆ ที่รับฟังบน 127.0.0.1 จะเห็นเฉพาะทราฟฟิกจากโฮสต์ของตนเองเท่านั้น สิ่งใดก็ตามที่มาจากภายนอกและอ้างว่ามีที่อยู่ต้นทางเป็น 127 จะถูกทิ้งไปอย่างเงียบๆ ผู้เชี่ยวชาญด้านเครือข่ายเรียกแพ็กเก็ตเหล่านั้นว่า "มนุษย์ต่างดาว"

ชื่อ "localhost" นั้นเป็นเพียงชื่อโฮสต์ที่เข้าใจง่ายสำหรับมนุษย์ ซึ่งหมายถึงแนวคิดเดียวกัน ลองเปิดไฟล์ `/etc/hosts` บน macOS หรือ Linux หรือ `C:\Windows\System32\drivers\etc\hosts` บน Windows คุณจะเห็นบรรทัดนี้อยู่ใกล้ๆ ด้านบน: `127.0.0.1 localhost`

127.0.0.1:57573 คำอธิบาย

ที่อยู่ลูปแบ็ก: วิธีที่ localhost กำหนดเส้นทางไปยังเครื่องของคุณ

127.0.0.1 เป็นบล็อกที่รู้จักกันดี แต่ไม่ใช่บล็อกเดียว บล็อก 127.0.0.0/8 ทั้งหมด ซึ่งมีที่อยู่มากกว่าสิบหกล้านที่อยู่ ล้วนเชื่อมโยงกลับมา คุณสามารถ ping 127.42.42.42 บน Linux ได้ และมันก็ใช้งานได้ ส่วนใหญ่เรามักใช้ 127.0.0.1 โดยอัตโนมัติ แต่บล็อกที่กว้างกว่านั้นมีความสำคัญเมื่อคุณอ่านกฎ iptables หรือตรวจสอบภาพดิสก์ที่มีการรักษาความปลอดภัยอย่างเข้มงวด (มีร่างข้อเสนอที่อยู่ใน IETF มาหลายปีแล้ว ซึ่งเสนอให้เรียกคืนบล็อก 127/8 ส่วนใหญ่สำหรับการใช้งานแบบ unicast แต่ยังไม่ได้รับการอนุมัติ)

ฝั่ง IPv6 นั้นกระชับกว่า มีแอดเดรสเดียวคือ `::1` ซึ่งกำหนดไว้ใน RFC 4291 ไม่มี /8 ไม่มีแอดเดรสสำรอง หากบริการของคุณผูกกับ `::1` เท่านั้น อะไรก็ตามที่พยายามเชื่อมต่อกับ 127.0.0.1 จะไม่ได้รับอะไรเลย และในทางกลับกัน บนระบบ Linux และ macOS รุ่นใหม่ๆ `localhost` จะแปลงเป็นทั้งสองแอดเดรส ดังนั้นเบราว์เซอร์มักจะลอง `::1` ก่อน หากล้มเหลว จากนั้นจึงเปลี่ยนไปใช้แอดเดรสอื่น คุณจะเห็นความล่าช้าเล็กน้อยแต่ชัดเจนนี้ การกำหนดแอดเดรสเดียวภายในสคริปต์จะช่วยขจัดความกำกวมนี้ได้

เคอร์เนลจะจัดการแพ็กเก็ตลูปแบ็กบนอินเทอร์เฟซเสมือน ลินุกซ์เรียกว่า `lo` ส่วน macOS เรียกว่า `lo0` คำสั่ง `ip link show` และ `ifconfig lo0` จะแสดงข้อมูลอินเทอร์เฟซนี้ ไฟร์วอลล์ชุดเดียวกันที่ควบคุมการรับส่งข้อมูลอื่นๆ ก็ควบคุมการรับส่งข้อมูลลูปแบ็กด้วยเช่นกัน ซึ่งเป็นเหตุผลว่าทำไมการตั้งค่าไฟร์วอลล์ที่เข้มงวดเกินไปจึงอาจทำให้การรับส่งข้อมูลภายในเครือข่ายหยุดชะงักได้ เราจะพูดถึงเรื่องนี้เพิ่มเติมในส่วนถัดไป

ประเด็นสำคัญสำหรับการพัฒนาคือ: 127.0.0.1 เป็นอินเทอร์เฟซที่ปลอดภัยที่สุดในการเชื่อมต่อ ไม่มีสิ่งใดภายนอกเครื่องของคุณสามารถเข้าถึงได้ คอนเทนเนอร์และ VM มีลูปแบ็กของตัวเองแยกต่างหากจากโฮสต์ ซึ่งเป็นสิ่งที่ทำให้ผู้พัฒนาส่วนใหญ่สับสนในครั้งแรกที่พวกเขาคาดหวังว่า 127.0.0.1 ภายในคอนเทนเนอร์ Docker จะสามารถเข้าถึงบริการบนแล็ปท็อปได้อย่างน่าอัศจรรย์

ทำไมต้องใช้พอร์ต 57573? คำอธิบายช่วงหมายเลขพอร์ตของ IANA

พอร์ต 57573 ไม่ใช่พอร์ตพิเศษอะไร ระบบปฏิบัติการหรือเฟรมเวิร์กเลือกใช้เพราะมันว่างอยู่ เพื่อทำความเข้าใจว่าทำไมหมายเลขขนาดใหญ่เช่นนี้จึงปรากฏขึ้นบ่อยครั้ง คุณต้องดูว่า IANA จัดสรรพื้นที่พอร์ต 16 บิตอย่างไร แผนการทั้งหมดนี้อยู่ใน RFC 6335 และ IANA Service Name and Transport Protocol Port Number Registry

พิสัย ชื่อ IANA ตัวอย่าง
0–1023 ระบบ / พอร์ตที่รู้จักกันดี 22 SSH, 80 HTTP, 443 HTTPS, 53 DNS
1024–49151 ผู้ใช้ / พอร์ตที่ลงทะเบียน 3306 MySQL, 5432 Postgres, 8080 alt-HTTP
49152–65535 แบบไดนามิก / ส่วนตัว / ชั่วคราว ระบบปฏิบัติการกำหนดให้โดยอัตโนมัติ ไม่ได้จดทะเบียนกับ IANA

ช่วงหมายเลข 49152–65535 เป็นช่วงที่ IANA แนะนำ สำหรับพอร์ตชั่วคราว แต่เคอร์เนลของระบบจริงมักไม่เห็นด้วยกับช่วงหมายเลขนี้ Linux ใช้ช่วงหมายเลข 32768–60999 เป็นค่าเริ่มต้น (โดยใช้คำสั่ง `sysctl net.ipv4.ip_local_port_range`) Windows ตั้งแต่ Vista เป็นต้นมาใช้ช่วงหมายเลข 49152–65535 ส่วนในยุค XP ใช้ช่วงหมายเลข 1025–5000 ซึ่งเป็นช่วงที่แคบมาก ทำให้พอร์ตทำงานหนักและก่อให้เกิดปัญหาขัดข้องบ่อยครั้ง macOS ยึดตามข้อกำหนดของ IANA พอร์ต 57573 อยู่ในช่วงค่าเริ่มต้นของระบบสมัยใหม่ทุกระบบ ข้อเท็จจริงเพียงข้อเดียวนี้อธิบายได้ว่าทำไมมันถึงปรากฏอยู่ในบันทึกการพัฒนาอยู่บ่อยครั้ง

เมื่อโค้ดของคุณเรียกใช้ `app.run(port=0)` ใน Flask หรือ `server.listen(0)` ใน Node ระบบปฏิบัติการจะเลือกพอร์ตว่างใดก็ได้จากช่วงพอร์ตไดนามิกในเครื่อง บนแล็ปท็อป Linux นั่นหมายถึงพอร์ตตั้งแต่ 32768 ถึง 60999 พอร์ต 57573 ก็อยู่ในช่วงที่เหมาะสม เช่นเดียวกับเครื่องมือที่กำหนดพอร์ตอัตโนมัติอื่นๆ เช่น Vite (ซึ่งจงใจตั้งค่าเริ่มต้นเป็น 127.0.0.1 ในปี 2022 เพื่อป้องกันไม่ให้นักพัฒนาใช้ Wi-Fi ในร้านกาแฟจนทำให้เซิร์ฟเวอร์รั่วไหล), webpack-dev-server, VS Code Live Server, Jupyter, Selenium driver bridges, Playwright, และดีบักเกอร์ `--inspect=0` ของ Node เครื่องมือเหล่านี้ล้วนขอพอร์ตสูงที่ว่างจากเคอร์เนลและใช้พอร์ตที่ได้มา

ดังนั้น หากหมายเลขพอร์ต 57573 ปรากฏใน stack trace คำตอบที่ดูธรรมดาที่สุดมักจะเป็นคำตอบที่ถูกต้องเสมอ อาจเป็นเพราะกระบวนการบางอย่างจงใจผูกกับพอร์ตนั้น หรือเฟรมเวิร์กบางตัวร้องขอ "พอร์ตว่างใดก็ได้" และเคอร์เนลเลือกพอร์ตนี้ ไม่มีอะไรผิดปกติกับหมายเลขพอร์ต 57573 โดยเฉพาะ เฟรมเวิร์กสำหรับการทดสอบและพัฒนาส่วนใหญ่จะถือว่าช่วงหมายเลขสูงทั้งหมดเป็นสภาพแวดล้อมที่ปลอดภัยและแยกต่างหาก เนื่องจากไม่มีบริการสาธารณะใดขึ้นอยู่กับพอร์ตนี้

การผูกเซิร์ฟเวอร์กับ 127.0.0.1 เทียบกับ 0.0.0.0 เทียบกับ ::1

หากเลือกเป้าหมายการผูกข้อมูลผิด คุณจะเจอปัญหาแปลกๆ มีคำจำกัดความสามข้อที่ต้องจำให้ถูกต้อง

127.0.0.1 เชื่อมต่อเฉพาะลูปแบ็ก IPv4 เท่านั้น สามารถเข้าถึงได้จากเครื่องเดียวกันบนไคลเอ็นต์ IPv4 ใดๆ ก็ได้ ไม่สามารถเข้าถึงได้จากภายนอก

::1 ผูกลูปแบ็ก IPv6 เท่านั้น หลักการเดียวกัน แต่ใช้ได้เฉพาะกับไคลเอ็นต์ IPv6 บนเครื่องเดียวกันเท่านั้น

การตั้งค่า 0.0.0.0 จะผูกอินเทอร์เฟซ IPv4 ทุกตัวบนอุปกรณ์นั้น ใครก็ตามที่เชื่อมต่อมายังเครื่องของคุณก็สามารถเข้าถึงได้ รวมถึงโทรศัพท์ที่อยู่ในเครือข่าย Wi-Fi เดียวกัน อุปกรณ์ VPN และ (ด้วยการส่งต่อพอร์ต) อินเทอร์เน็ตสาธารณะ

สำหรับการใช้งานพัฒนาซอฟต์แวร์ในชีวิตประจำวัน ให้ตั้งค่า bind เป็น 127.0.0.1 เพราะเป็นอินเทอร์เฟซเดียวที่ไฟร์วอลล์ นโยบาย VPN และการเปิดเผยข้อมูลโดยไม่ตั้งใจจะไม่เป็นปัญหาอีกต่อไป Flask, FastAPI และ Express ต่างก็ใช้ค่าเริ่มต้นเป็นอินเทอร์เฟซนี้

จากประสบการณ์ของผม คนส่วนใหญ่มักจะเลือกใช้ 0.0.0.0 จากสามสาเหตุหลักๆ คือ การทดสอบบนโทรศัพท์ผ่านเครือข่าย LAN การทดสอบภายใน Docker และการทำตามบทช่วยสอนที่ผู้เขียนคัดลอกค่าเริ่มต้นผิดมา ซึ่งแต่ละสาเหตุก็มีวิธีที่ปลอดภัยกว่า สำหรับการทดสอบผ่าน LAN ให้ผูกกับ IP ของ LAN นั้นโดยเฉพาะ และเพิ่มกฎไฟร์วอลล์ชั่วคราว สำหรับ Docker ให้ผูก 0.0.0.0 ภายในคอนเทนเนอร์ แต่เผยแพร่บนโฮสต์ด้วยคำสั่ง `docker run -p 127.0.0.1:8080:8080 …` สำหรับบทช่วยสอน ให้ละเว้นบรรทัด 0.0.0.0 และกำหนด IP เป็น 127.0.0.1 เว้นแต่จะมีเหตุผลที่แท้จริง

ตัวอย่างโค้ด Flask ที่น่าเบื่อนี้แสดงค่าเริ่มต้นที่ปลอดภัย:

```

จากการนำเข้า Flask Flask

แอป = Flask(__name__)

@app.route("/")

def index():

คืนค่า "สวัสดี localhost!"

ถ้า __name__ == "__main__":

app.run(host="127.0.0.1", port=57573)

```

ตรวจสอบพอร์ต 57573 ด้วยคำสั่ง netstat, lsof และ ss

มีบางอย่างกำลังดักฟังอยู่ที่พอร์ต 57573 และคุณไม่รู้ว่ามันคืออะไร คำสั่งที่ใช้จะขึ้นอยู่กับระบบปฏิบัติการของคุณ จำรายการคำสั่งสั้นๆ นี้ไว้ แล้วคุณจะได้ใช้มันไปอีกหลายปี

ระบบปฏิบัติการ / เชลล์ สั่งการ หมายเหตุ
ลินุกซ์ (สมัยใหม่) `ss -tlnp \ grep :57573` แทนที่คำสั่ง netstat แสดงสถานะกระบวนการทำงานหากเรียกใช้ในฐานะผู้ใช้ root
ลินุกซ์ (รุ่นเก่า) `netstat -tlnp \ grep :57573` net-tools อาจไม่สามารถติดตั้งบนอิมเมจขนาดเล็กได้
ระบบปฏิบัติการ macOS `lsof -i :57573` บน Linux ก็เช่นเดียวกัน รวมถึงกระบวนการและผู้ใช้ด้วย
คำสั่ง Windows `netstat -ano \ findstr :57573` คอลัมน์ PID จะเชื่อมโยงกับตัวจัดการงาน (Task Manager)
วินโดวส์พาวเวอร์เชลล์ `Get-NetTCPConnection -LocalPort 57573` ทำความสะอาดได้ เขียนสคริปต์ได้

ตัวอย่างผลลัพธ์ทั่วไปจาก Linux:

```

$ ss -tlnp | grep 57573

ฟัง 0 4096 127.0.0.1:57573 0.0.0.0:* ผู้ใช้:(("python3",pid=18432,fd=4))

```

มีทั้งหมดหกช่อง เรียงจากซ้ายไปขวา ได้แก่ สถานะ คิวส่ง คิวรับ ที่อยู่โลคัล ที่อยู่พีเออร์ และกระบวนการ ในกรณีนี้คือ PID 18432 ใช้คำสั่ง `kill 18432` บน Unix หรือ `Stop-Process -Id 18432` ใน PowerShell เสร็จแล้ว ถ้าคุณต้องการแค่พอร์ตกลับมา การแก้ไขก็เสร็จเรียบร้อยแล้ว

ถ้าไม่มีอะไรแสดงขึ้นมาเลยล่ะ? นั่นหมายความว่าไม่มีอะไรกำลังรอรับการเชื่อมต่อ ซึ่งนั่นก็เป็นข้อมูลที่มีประโยชน์อย่างหนึ่ง ข้อผิดพลาดของเบราว์เซอร์ที่คุณเห็นอยู่เรื่อยๆ ว่า "การเชื่อมต่อถูกปฏิเสธ" มักหมายความว่าอย่างนั้น เซิร์ฟเวอร์ของคุณหายไปแล้ว มันล่มตั้งแต่เริ่มต้น หรือมันไม่สามารถเชื่อมต่อกับที่อยู่ที่คุณพิมพ์ได้เลย

ข้อผิดพลาดการเชื่อมต่อล้มเหลวที่พบบ่อยและความหมายของแต่ละข้อผิดพลาด

หกอย่าง นั่นคือรายการความล้มเหลวทั้งหมดที่คุณเห็นที่ 127.0.0.1:57573 อ่านข้อความแสดงข้อผิดพลาด เลือกกลุ่มใดกลุ่มหนึ่ง

ข้อความ `EADDRINUSE`, "ที่อยู่ถูกใช้งานอยู่แล้ว" หรือ "พอร์ต 57573 ถูกจัดสรรไว้แล้ว" ล้วนมีความหมายเหมือนกัน คือ มีแอปพลิเคชันอื่นกำลังใช้งานพอร์ตนั้นอยู่ คำสั่งตรวจสอบจากส่วนก่อนหน้านี้จะบอกคุณว่าแอปพลิเคชันใดกำลังใช้งานอยู่ ให้ปิดการทำงานของแอปพลิเคชันนั้น หรือเปลี่ยนไปใช้พอร์ตอื่นสำหรับบริการของคุณ เครื่องมืออย่าง netstat หรือ lsof จะช่วยให้คุณตรวจสอบเสร็จสิ้นได้ในบรรทัดเดียว

`ECONNREFUSED` ซึ่งเป็นข้อความที่เป็นมิตรมากกว่าในความหมายว่า "การเชื่อมต่อถูกปฏิเสธ" หมายความว่า: TCP เข้าสู่เคอร์เนลแล้ว แต่ไม่มีใครรับสาย เซิร์ฟเวอร์ของคุณหยุดทำงานขณะเริ่มต้น หรือไม่เคยเชื่อมต่อเลย ลองดูที่เทอร์มินัลที่คุณใช้เรียกใช้งาน คุณจะเห็นรายละเอียดข้อผิดพลาดอยู่ที่นั่น

`ETIMEDOUT` และ "Connection timed out" หมายความว่าแพ็กเก็ตหายไปโดยไม่มีการแจ้งเตือนใดๆ บนเครือข่าย 127.0.0.1 นั้น โดยปกติแล้วไม่ควรเกิดเหตุการณ์เช่นนี้ขึ้น เมื่อเกิดขึ้น สาเหตุอาจมาจากกฎไฟร์วอลล์ ตัวแทน VPN หรือเครื่องมือป้องกันปลายทางบางอย่าง ให้ปิดใช้งานทีละอย่าง แล้วลองเชื่อมต่อใหม่ ทำซ้ำไปเรื่อยๆ

ข้อความ `EACCES` ("Permission denied") จะปรากฏขึ้นเมื่อคุณพยายามผูกพอร์ตต่ำกว่า 1024 โดยไม่มีสิทธิ์ root ให้ใช้พอร์ตสูงกว่า เช่น 57573 หรือเรียกใช้ไบนารีในฐานะ root ตัวเลือกที่สามนั้นไม่มีอยู่จริง

`EAI_NONAME` และข้อผิดพลาด DNS อื่นๆ หมายความว่าชื่อโฮสต์ไม่ได้รับการแก้ไข ไฟล์ hosts ควรแมป `localhost` กับ 127.0.0.1 อาจมีไคลเอนต์ VPN บางตัวที่เขียนทับค่านี้ หรือผู้ดูแลระบบอาจส่งอิมเมจที่เสียหายมาให้ เปิดไฟล์ hosts ตรวจสอบให้แน่ใจว่า `127.0.0.1 localhost` เป็นบรรทัดแรกที่ไม่ใช่บรรทัดแสดงความคิดเห็น

สุดท้ายแล้ว วิธีที่ค่อนข้างลับๆ หลังจากปิดเครื่องอย่างถูกต้อง เคอร์เนลจะล็อกซ็อกเก็ตไว้ในสถานะ TIME_WAIT ประมาณสองนาที ถ้ารีสตาร์ทเซิร์ฟเวอร์เร็วๆ คุณจะเห็นข้อความ "Address already in use" ทั้งๆ ที่ไม่มีใครกำลังรอรับการเชื่อมต่ออยู่ มีสามวิธีแก้: รอจนครบกำหนด, ตั้งค่า `SO_REUSEADDR` ใน bind ของคุณ หรือเปลี่ยนไปใช้พอร์ตอื่น ส่วนใหญ่เรามักจะเปลี่ยนพอร์ตครับ

อ่านข้อความแสดงข้อผิดพลาด เลือกกลุ่มข้อมูล และทำการแก้ไข โดยปกติแล้วกระบวนการทั้งหมดจะเสร็จสิ้นภายในเวลาไม่ถึงหนึ่งนาที

127.0.0.1:57573 คำอธิบาย

การตั้งค่าไฟร์วอลล์ที่บล็อกพอร์ต 57573

ตามทฤษฎีแล้ว การรับส่งข้อมูลแบบ Loopback นั้นได้รับอนุญาตเสมอ แต่ในทางปฏิบัติ กฎของไฟร์วอลล์บางครั้งอาจทำให้การรับส่งข้อมูลแบบนี้ไม่ได้รับอนุญาต ตัวการที่มักพบเห็นได้ในปี 2026 ได้แก่:

  • ตั้งค่า Application Firewall ของ macOS เป็นแบบ "บล็อกการเชื่อมต่อขาเข้า" โดยกำหนดเป็นแบบเข้มงวด เพิ่มไบนารีที่เป็นเจ้าของพอร์ต 57573 ลงในรายการที่อนุญาตใน การตั้งค่าระบบ → เครือข่าย → ไฟร์วอลล์
  • โปรไฟล์ไฟร์วอลล์ Windows Defender ไม่ตรงกัน เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ตัวใหม่แจ้งให้คุณอนุญาตการเข้าถึง คุณคลิกยกเลิกโดยอัตโนมัติ ระบบจึงบล็อกการเข้าถึงโดยไม่มีการแจ้งเตือนใดๆ เปิด `wf.msc` ลบกฎการปฏิเสธ แล้วยอมรับข้อความแจ้งเตือนในครั้งต่อไป
  • Linux ใช้ ufw หรือ iptables ที่มีนโยบายเริ่มต้นที่เข้มงวดขึ้น คำสั่ง `ufw status verbose` จะแสดงรายการกฎ คำสั่ง `ufw allow from 127.0.0.1` จะเปิด loopback อย่างชัดเจน โดยค่าเริ่มต้นของดิสทริบิวชันส่วนใหญ่จะอนุญาต `lo` อยู่แล้ว แต่บางอิมเมจที่มีความปลอดภัยสูงอาจไม่อนุญาตให้ใช้
  • VPN ขององค์กรหรือเอเจนต์ Zero Trust ดักจับการรับส่งข้อมูล เอเจนต์บางตัวใช้ตัวรับฟังในพื้นที่ผู้ใช้เป็นตัวกลางในการเชื่อมต่อภายใน และเปลี่ยนแปลงการเชื่อมต่อแบบ Loopback อย่างเงียบๆ ปิดใช้งานเอเจนต์เป็นเวลาหนึ่งนาทีเพื่อยืนยัน
  • โปรแกรมป้องกันไวรัสหรือโปรแกรมป้องกันปลายทาง (EDR) บางครั้งจะบล็อกไบนารีของโปรแกรมพัฒนาที่ผูกกับพอร์ตสูง จนกว่าคุณจะอนุญาตไบนารีเหล่านั้น

ในสภาพแวดล้อมขององค์กรที่มีการจัดการอย่างดี คุณควรคาดหวังว่าอย่างน้อยหนึ่งในข้อผิดพลาดเหล่านี้จะเกิดขึ้น ขั้นตอนการวินิจฉัยเหมือนกัน: ตรวจสอบการตั้งค่าไฟร์วอลล์ของคุณ จากนั้นเรียกใช้ `curl http://127.0.0.1:57573` จากเชลล์เดียวกันกับที่เริ่มต้นเซิร์ฟเวอร์ ถ้า curl ทำงานได้ แต่เบราว์เซอร์ล้มเหลว แสดงว่าคุณกำลังเข้าถึงอินเทอร์เฟซที่ไม่ถูกต้อง (มักจะเป็น `::1` แทนที่จะเป็น 127.0.0.1) หรือนโยบายการเข้าถึงเครือข่ายส่วนตัวกำลังทำงานอยู่ ถ้า curl ล้มเหลวอีก แสดงว่าเคอร์เนลหรือไฟร์วอลล์กำลังดักจับแพ็กเก็ตก่อนที่แพ็กเก็ตจะไปถึงโค้ดของคุณ นักพัฒนาเว็บและผู้ดูแลระบบเครือข่ายมักแลกเปลี่ยนเคล็ดลับเหล่านี้ในวิกิภายในองค์กร เพราะอาการจะดูเหมือนกันจนกว่าคุณจะเจอปัญหาซ้ำสองครั้ง

การใช้งาน Localhost ใน Docker, WSL และ GitHub Codespaces

สามจุดที่ localhost ไม่ทำงานอย่างที่คุณคาดหวัง

เริ่มจาก Docker ก่อน ภายในคอนเทนเนอร์ 127.0.0.1 คือ loopback ของคอนเทนเนอร์ ไม่ใช่ของคุณ ดังนั้นหากแล็ปท็อปของคุณรันบริการบน 127.0.0.1:57573 คอนเทนเนอร์จะไม่สามารถเข้าถึงได้ด้วยที่อยู่เดียวกันนั้นเลย เกตเวย์ของโฮสต์อยู่ที่อื่น: `host.docker.internal` บน Mac และ Windows หรือ IP ของบริดจ์บางตัวบน Linux ทิศทางย้อนกลับ (บริการคอนเทนเนอร์ ผู้เรียกจากโฮสต์) ต้องใช้แฟล็ก publish `docker run -p 127.0.0.1:57573:57573 my-image` หากตัด `-p` ออก พอร์ตนั้นจะไม่มีอยู่ภายนอกคอนเทนเนอร์

WSL2 มีเอกลักษณ์เฉพาะตัว โหมดเครือข่ายแบบมิเรอร์ (เลือกใช้ได้ใน Windows 11 22H2 และเวอร์ชันที่ใหม่กว่า ผ่าน `[wsl2] networkingMode=mirrored`) จะใช้สแต็กเครือข่ายของโฮสต์ร่วมกับ VM ใน WSL ในโหมดนี้ บริการบน 127.0.0.1:57573 ภายใน WSL จะตอบกลับบน Windows ที่ที่อยู่เดียวกัน โหมด NAT เริ่มต้นยังคงส่งต่อพอร์ต แต่เฉพาะสำหรับสตริง `localhost` เท่านั้น ไม่ใช่สำหรับ 127.0.0.1 เสมอไป นอกจากนี้ยังมีบั๊กที่ร้ายแรงที่รู้จักกันดี ซึ่งติดตามได้ใน Microsoft WSL #40169 โหมดมิเรอร์จะล็อกพอร์ตที่มีหมายเลขสูงจำนวนมากอย่างเงียบๆ การพยายามผูกพอร์ตบน 127.0.0.1 จะล้มเหลวด้วย `WinError 10013` ซึ่ง Python จะรายงานว่าเป็น `PermissionError` เมื่อพอร์ตไม่สามารถผูกได้บน Windows โดยไม่มีเหตุผลที่ชัดเจน ให้ตรวจสอบสิ่งนี้ก่อน

GitHub Codespaces และ VS Code Remote SSH ทำงานในทิศทางตรงกันข้าม พวกมันจะส่งต่อพอร์ตของคุณโดยอัตโนมัติ เริ่มเซิร์ฟเวอร์ภายใน Codespace ที่ 127.0.0.1:57573 และตัวแก้ไขจะเปิดอุโมงค์ให้คุณ โดยเปิดเผยพอร์ตนั้นที่ URL github.dev ที่ไม่ซ้ำกัน แท็บเบราว์เซอร์ที่คุณเปิดบนแล็ปท็อปจะสื่อสารกับ URL นั้น ไม่ใช่ 127.0.0.1 และคำขอจะส่งผ่านอุโมงค์กลับไปยังพื้นที่ทำงาน

ชื่อปลายทางอาจดูเหมือนกัน แต่เส้นทางที่แพ็กเก็ตใช้จริงนั้นแตกต่างกันอย่างมากในแต่ละสภาพแวดล้อม การใช้เวลาเพียงห้านาทีในการตรวจสอบว่าคุณอยู่ในสภาพแวดล้อมใด จะช่วยประหยัดเวลาถึงยี่สิบนาทีในการจ้องมองข้อความ "การเชื่อมต่อถูกปฏิเสธ"

HTTPS บน Localhost: แนวทางปฏิบัติที่ดีที่สุดสำหรับการพัฒนาในเครื่องอย่างปลอดภัย

เบราว์เซอร์สมัยใหม่และ API จำนวนมากต้องการ HTTPS แม้แต่สำหรับการพัฒนาในเครื่องก็ตาม Service workers, การระบุตำแหน่งทางภูมิศาสตร์, API คลิปบอร์ด และคุกกี้ใดๆ ที่มีเครื่องหมาย `Secure` ทั้งหมดนี้ปฏิเสธที่จะทำงานผ่าน HTTP ธรรมดา มีข้อยกเว้นหนึ่งอย่างคือ 127.0.0.1 ซึ่งเบราว์เซอร์ถือว่าเป็นบริบทที่ปลอดภัยอยู่แล้ว ข้อยกเว้นนี้ครอบคลุมการพัฒนาทั่วไปส่วนใหญ่แล้ว สำหรับอย่างอื่น ให้ใช้ TLS ในเครื่อง

เครื่องมือที่สะอาดที่สุดคือ mkcert ซึ่งเขียนโดย Filippo Valsorda เรียกใช้งานครั้งแรกด้วยคำสั่ง `mkcert -install` จากนั้นเรียกใช้ `mkcert localhost 127.0.0.1 ::1` คุณจะได้ใบรับรอง `localhost+2.pem` พร้อมคีย์ ชี้เซิร์ฟเวอร์สำหรับการพัฒนาของคุณไปยังไฟล์และคีย์ดังกล่าว เบราว์เซอร์จะแสดงไอคอนแม่กุญแจที่สะอาดตาโดยไม่มีคำเตือนใดๆ เพราะ mkcert ได้ติดตั้ง CA รูทในระบบของคุณและที่เก็บใบรับรองที่เชื่อถือได้ของ Firefox แล้ว Let's Encrypt ไม่สามารถออกใบรับรองจริงสำหรับ `127.0.0.1` ได้ เนื่องจากไม่มีโดเมนให้ตรวจสอบ ดังนั้น CA ในระบบจึงเป็นคำตอบมาตรฐาน

รูปแบบอื่นๆ ที่น่าสนใจอีกเล็กน้อย:

  • สำหรับการทดสอบแบบอัตโนมัติ ให้ชี้ไปยังบริการ magic-DNS (`nip.io`, `sslip.io`, `traefik.me`, `localhost.direct`) เพื่อแปลงที่อยู่ IP ให้เป็นชื่อโฮสต์จริง เช่น `127.0.0.1.nip.io` Let's Encrypt หรือ ZeroSSL สามารถรับรองความถูกต้องได้ และ `localhost.direct` ยังเผยแพร่ใบรับรอง wildcard ที่ออกให้ล่วงหน้าอีกด้วย
  • ผูกบริการของคุณกับ 127.0.0.1 ไม่ใช่ 0.0.0.0 เพื่อให้ใบรับรอง (ซึ่งครอบคลุม `127.0.0.1`) ตรงกัน
  • อย่าเก็บใบรับรองการพัฒนาไว้ใน Git เพราะคำสั่ง `mkcert` จะบันทึกใบรับรองเหล่านั้นไว้ในไดเร็กทอรีการทำงานของคุณโดยค่าเริ่มต้น ให้เพิ่มใบรับรองทั้งสองลงในไฟล์ `.gitignore` ทันที
  • ควรเปลี่ยน CA ในเครื่องทุกๆ สองสามเดือน คำสั่ง `mkcert -uninstall` จะล้างข้อมูล CA นั้นออกไป
  • หากคุณใช้งานอยู่เบื้องหลังพร็อกซี MITM ขององค์กร โปรดยอมรับว่าพร็อกซีจะทำการสลับใบรับรองของคุณ ปิดใช้งานพร็อกซีบน `127.0.0.1` หากเครื่องมือของคุณรองรับ

นอกจากนี้ เบราว์เซอร์ยังมีกฎพิเศษที่ควรทราบ ตามข้อกำหนด W3C Secure Contexts `http://127.0.0.1`, `http://localhost` และ `http://[::1]` ถือว่า "อาจเชื่อถือได้" ซึ่งทำให้หน้าเว็บ HTTPS สามารถดึงข้อมูลจากเว็บไซต์เหล่านี้ได้โดยไม่ทำให้เกิดการบล็อกเนื้อหาผสม ข้อยกเว้นนี้มีไว้สำหรับการพัฒนาในเครื่องโดยเฉพาะ

Localhost ไม่ใช่ขอบเขตความปลอดภัยอย่างที่นักพัฒนามักเข้าใจ เบราว์เซอร์สามารถถูกหลอกให้เข้าถึง Localhost จากเว็บไซต์ใดๆ ก็ได้ผ่านการแปลง DNS ใหม่ โดยที่เว็บไซต์ที่เป็นอันตรายจะแปลงชื่อโฮสต์เป็น 127.0.0.1 และอนุญาตให้ JavaScript บนหน้าเว็บของผู้โจมตีสื่อสารกับบริการภายในเครื่องภายใต้โดเมนของเว็บไซต์เดิม กรณีตัวอย่างที่ชัดเจนที่สุดคือช่องโหว่ Zoom CVE ปี 2019 (CVE-2019-13450) Zoom ได้ติดตั้งเว็บเซิร์ฟเวอร์ที่ซ่อนอยู่บน `localhost:19421` บน macOS เพื่อให้ลิงก์การประชุมสามารถเปิดแอปพลิเคชันบนเดสก์ท็อปได้ และเว็บไซต์ใดๆ ก็สามารถดึงข้อมูลจากเว็บเซิร์ฟเวอร์นั้นเพื่อบังคับเข้าร่วมการประชุมโดยเปิดกล้องให้กับผู้ใช้ได้ มีเครื่อง Mac ประมาณ 4 ล้านเครื่องที่ได้รับผลกระทบ รวมถึงไคลเอนต์แบบ white-label อีก 13 เครื่องที่ใช้เอนจิ้นเดียวกัน Chrome 142 ที่วางจำหน่ายในช่วงปลายปี 2025 ได้แทนที่การเข้าถึงเครือข่ายส่วนตัวแบบเก่าด้วยการเข้าถึงเครือข่ายภายในเครื่อง (Local Network Access) ปัจจุบันหน้าเว็บสาธารณะจำเป็นต้องมีการขออนุญาตอย่างชัดเจนก่อนจึงจะสามารถเข้าถึงที่อยู่ loopback หรือที่อยู่ส่วนตัวได้ ซึ่งทำให้กลโกงส่วนใหญ่ที่ Singularity ของ NCC Group ใช้โดยอัตโนมัตินั้นใช้การไม่ได้ คำแนะนำของ Straiker ในปี 2025 ได้บันทึกการโจมตีแบบเดียวกันนี้ต่อเซิร์ฟเวอร์ Model Context Protocol ที่ทำงานบนเครื่องโลคอล ซึ่งกลายเป็นช่องโหว่ที่เติบโตอย่างรวดเร็วเนื่องจากนักพัฒนาใช้งานเอเจนต์ LLM บน loopback มากขึ้น ควรผูกกับ 127.0.0.1 อย่างเคร่งครัด ต้องมีการตรวจสอบสิทธิ์ ตรวจสอบส่วนหัว `Origin` และหลีกเลี่ยงการใช้ CORS แบบไวด์การ์ดใน API สำหรับนักพัฒนา สี่ข้อนี้สามารถดักจับการโจมตีส่วนใหญ่ได้

เคล็ดลับการแก้ไขปัญหาและรายการตรวจสอบการวินิจฉัยเบื้องต้นอย่างรวดเร็ว

เมื่อ 127.0.0.1:57573 ไม่ตอบสนอง ให้ลองตรวจสอบรายการสั้นๆ นี้ก่อนที่จะสงสัยว่ามีกลไกซับซ้อนกว่านั้น

1. ตรวจสอบว่าเซิร์ฟเวอร์ทำงานอยู่จริงหรือไม่ ดูที่เทอร์มินัลที่คุณใช้เรียกใช้งาน หากเกิดข้อผิดพลาด ข้อมูลการติดตามข้อผิดพลาด (stack trace) จะปรากฏอยู่ที่นั่น

2. ตรวจสอบให้แน่ใจว่าผูกกับ 127.0.0.1 ไม่ใช่ 0.0.0.0 หรือ ::1 เพียงอย่างเดียว เฟรมเวิร์กส่วนใหญ่จะแสดงที่อยู่ผูก (bind address) เมื่อเริ่มต้นระบบ อ่านบรรทัดนั้นดู

3. ลองใช้คำสั่ง `curl -v http://127.0.0.1:57573` จากเชลล์เดียวกันดู Curl ทำงานได้หรือไม่? แสดงว่าปัญหาอยู่ที่เบราว์เซอร์ ไม่ใช่เซิร์ฟเวอร์

4. ตรวจสอบว่าใครเป็นเจ้าของพอร์ต สำหรับ Linux ใช้คำสั่ง `ss -tlnp | grep :57573` สำหรับ macOS ใช้คำสั่ง `lsof -i :57573` สำหรับ Windows ใช้คำสั่ง `netstat -ano | findstr :57573`

5. กระบวนการที่ไม่ถูกต้องกำลังควบคุมไฟล์อยู่หรือไม่? ให้ปิดกระบวนการนั้น แล้วรีสตาร์ทเซิร์ฟเวอร์ของคุณ

6. ไม่มีอะไรกำลังรับฟังอยู่เลยใช่ไหม? ลองดูบันทึกการเริ่มต้นระบบดู `EACCES` หมายถึงพอร์ตที่มีสิทธิ์พิเศษ `EADDRINUSE` มักหมายถึง TIME_WAIT ที่ค้างอยู่

7. ลองใช้รูปแบบ IPv6 ดู `curl http://[::1]:57573` หาก `127.0.0.1` หรือ `::1` ตัวใดตัวหนึ่งใช้งานได้ และอีกตัวใช้งานไม่ได้ แสดงว่าบริการของคุณเป็นแบบ single-stack

8. ลองใช้พอร์ตอื่น: ใส่พารามิเตอร์ `--port 12345` (หรือพอร์ตอื่นๆ) แล้วรีโหลด หากพอร์ตใหม่ใช้งานได้ แสดงว่ามีปัญหาความขัดแย้งเกี่ยวกับพอร์ต

9. ปิด VPN, โปรแกรมป้องกันไวรัส และเอเจนต์ปลายทางเป็นเวลาหนึ่งนาที หากพอร์ต 57573 เริ่มตอบสนอง แสดงว่าหนึ่งในนั้นกำลังดึงข้อมูลไปใช้มากเกินไป

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

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

หมายเหตุที่เกี่ยวข้องกับ Plisio: เมื่อคุณผสานรวมเว็บฮุคของตัวประมวลผลการชำระเงินคริปโต เกตเวย์จำเป็นต้องมี URL สาธารณะที่สามารถส่งข้อมูลแบบ POST ได้ ใบแจ้งหนี้ของ Plisio ยอมรับ `callback_url` ในเพย์โหลด API และระบบจะส่งข้อมูลอัปเดตสถานะไปยังปลายทางนั้น เซิร์ฟเวอร์ภายในเครื่องของคุณที่ 127.0.0.1:57573 ไม่สามารถเข้าถึงได้จากอินเทอร์เน็ตสาธารณะตามนิยาม ดังนั้นวิธีแก้ปัญหามาตรฐานคือการใช้ Tunnel ในปี 2026 ตัวเลือกที่นิยมใช้กันคือ ngrok (ส่วนบุคคล $8/เดือน, Pro $20/เดือน), Cloudflare Tunnel (ฟรีสำหรับผู้ใช้สูงสุด 50 คนบน Zero Trust) และ Tailscale Funnel (ฟรีสำหรับการใช้งานส่วนบุคคล ทีมแบบชำระเงินเริ่มต้นที่ $6/ผู้ใช้/เดือน) แต่ละตัวจะรับชื่อโฮสต์สาธารณะและส่งต่อทราฟฟิกไปยัง 127.0.0.1:57573 บนแล็ปท็อปของคุณ Plisio มี SDK สำหรับ Python, PHP และ Node ที่มีฟังก์ชัน `validate_callback` ซึ่งใช้ตรวจสอบค่า `verify_hash` ของ HMAC-SHA1 บนเนื้อหา JSON ที่เรียงลำดับแล้ว ดังนั้นเมื่อเชื่อมต่ออุโมงค์แล้ว ตัวจัดการเดียวกันจะทำงานได้อย่างเหมือนกันทั้งในสภาพแวดล้อมการพัฒนาและการใช้งานจริง

มีคำถามอะไรไหม?

สำหรับนักพัฒนา ใช่แล้ว ที่อยู่ IP จะยังคงอยู่บนเครื่องของคุณ ความเสี่ยงส่วนใหญ่เกิดจากตัวเราเอง เช่น การผูก IP 0.0.0.0 โดยไม่ได้ตั้งใจ การเผยแพร่ API สำหรับการดีบักโดยไม่มีการตรวจสอบสิทธิ์ หรือการปล่อยให้เว็บเพจที่เป็นอันตรายโจมตีด้วย CSRF หรือ DNS rebinding ให้ผูก IP เป็น 127.0.0.1 กำหนดให้มีการตรวจสอบสิทธิ์ และยกเลิก CORS แบบ wildcard ปัญหาต่างๆ ส่วนใหญ่ก็จะหายไป

ตรวจสอบบันทึกเซิร์ฟเวอร์ก่อนเสมอ ถ้ากระบวนการทำงานอยู่ ให้ลองใช้คำสั่ง `curl http://127.0.0.1:57573` จากเชลล์เดียวกัน ถ้าใช้งานได้ใน curl แต่ใช้งานไม่ได้ในเบราว์เซอร์ แสดงว่า IPv6 กับ IPv4 ไม่ตรงกัน ถ้าใช้งานไม่ได้ทุกที่ แสดงว่ามีบางอย่างระหว่างเคอร์เนลกับโค้ดของคุณกำลังดักจับอยู่ โดยปกติจะเป็นไฟร์วอลล์ โปรแกรมป้องกันไวรัส หรือเอเจนต์ VPN ของบริษัท

พวกเขาทำไม่ได้ บล็อก 127.0.0.0/8 ทั้งหมดเป็นของลูปแบ็ก และเคอร์เนลจะดรอปแพ็กเก็ตขาเข้าใดๆ ที่อ้างว่ามาจากแหล่ง 127.x หากต้องการเปิดเผยเซิร์ฟเวอร์ภายในเครื่องของคุณ คุณต้องสร้างอุโมงค์ (ngrok, Cloudflare Tunnel) หรือเชื่อมต่อกับอินเทอร์เฟซเครือข่ายจริงและเปิดไฟร์วอลล์โดยเจตนา ไม่มีเส้นทางโดยบังเอิญจากอินเทอร์เน็ต

ค้นหาว่าอะไรเป็นเจ้าของพอร์ตนั้น แล้วทำลายมันซะ สำหรับ Mac หรือ Linux: `lsof -i :57573` สำหรับ Linux รุ่นใหม่: `ss -tlnp | grep :57573` สำหรับ Windows: `netstat -ano | findstr :57573` หรือจะย้ายแอปของคุณไปพอร์ตอื่นก็ได้ ไม่ว่าจะวิธีไหนก็ใช้เวลาแค่หกสิบวินาที

มีเซิร์ฟเวอร์สำหรับนักพัฒนาบางตัวกำลังทำงานอยู่ อาจจะเป็นเซิร์ฟเวอร์ที่คุณเริ่มใช้งาน หรืออาจจะเป็นเซิร์ฟเวอร์ที่เครื่องมืออื่นเริ่มใช้งานโดยที่คุณไม่รู้ตัว เช่น Flask, Vite, webpack-dev-server, Jupyter พวกมันทั้งหมดจะผูกกับพอร์ต 127.0.0.1 โดยค่าเริ่มต้น และจะเลือกใช้พอร์ตสูงที่ว่างอยู่หากพอร์ตที่พวกมันใช้งานอยู่ไม่ว่าง บริการจะทำงานอยู่ที่นั่นจนกว่าคุณจะปิดมันหรือแก้ไขไฟล์การกำหนดค่าของแอปพลิเคชัน

ประกอบด้วยสองส่วน 127.0.0.1 คือ IP แบบ loopback และ 57573 คือหมายเลขพอร์ตที่ระบบปฏิบัติการของคุณดึงมาจากพูลพอร์ตแบบไดนามิก การรับส่งข้อมูลระหว่างสองส่วนนี้จะอยู่ภายในเครื่องเท่านั้น จบเรื่อง

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.