আমার একটি রহস্যজনক সমস্যাটি একটি ছোট সার্ভারের সাথে যা আমি বাড়িতে চালাচ্ছি, একটি ন্যাটি রাউটারের পিছনে। আমি সেখানে বেশ কয়েকটি ওয়েব এবং অন্যান্য পরিষেবা চালাচ্ছি, যা আমি আমার ল্যানের বাইরেও পোর্ট ফরওয়ার্ডিংয়ের মাধ্যমে অ্যাক্সেস করতে পারি। কয়েক দিন থেকে, আমি আর ওয়েব সার্ভার অ্যাক্সেস করতে পারি না (পোর্ট 80 বা 443 প্রতি নয়)। তবে কেবল ল্যানের বাইরে থেকে ! এর মধ্যে থেকে আমি এখনও ঝামেলা ছাড়াই অ্যাক্সেস করতে পারি। এসএসএইচ এখনও বাইরে থেকে কাজ করে, যদিও এটি একটি মানহীন বন্দরে।
সুতরাং আমি একটি ওয়্যারশার্ক ট্রেস করেছি যেখানে ল্যানের বাইরে একটি ব্রাউজার সার্ভার অ্যাক্সেস করার চেষ্টা করে। পঠনযোগ্যতা এবং নাম প্রকাশের জন্য আমি সার্ভারের আইপি ঠিকানাটি এসএসএসে এবং ব্রাউজারের আইপি ঠিকানাটি বিবিবিবিতে পরিবর্তন করেছি
No. Time Source Destination Protocol Length Info
1 0.000000 b.b.b.b s.s.s.s TCP 66 59468 → 80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
2 0.022883 s.s.s.s b.b.b.b TCP 66 80 → 59468 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1380 SACK_PERM=1 WS=128
3 0.022949 b.b.b.b s.s.s.s TCP 54 59468 → 80 [ACK] Seq=1 Ack=1 Win=66048 Len=0
4 0.025405 b.b.b.b s.s.s.s HTTP 294 GET / HTTP/1.0
5 0.026677 s.s.s.s b.b.b.b HTTP 666 HTTP/1.1 403 Forbidden (text/html)
6 0.026678 s.s.s.s b.b.b.b TCP 54 80 → 59468 [FIN, ACK] Seq=613 Ack=241 Win=0 Len=0
7 0.026678 s.s.s.s b.b.b.b TCP 54 80 → 59468 [RST, ACK] Seq=614 Ack=241 Win=0 Len=0
টিসিপি সংযোগটি সঠিকভাবে সেট আপ করা হয়েছে। তারপরে ব্রাউজারটি HTTP GET অনুরোধ প্রেরণ করে এবং একটি "403 নিষিদ্ধ" প্রতিক্রিয়া গ্রহণ করে। এছাড়াও, প্রায় একই সাথে এইচটিটিপি প্রতিক্রিয়া বার্তাটি এটি একটি এফআইএন এবং একটি আরএসটি বার্তা পায়!
সার্ভারের দিকে আমি একই যোগাযোগের একটি টিসিপিডাম্প করেছি:
$ sudo tcpdump -n port 80 or port 443
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:53:26.625013 IP b.b.b.b.59468 > s.s.s.s.80: Flags [S], seq 2382139585, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0
16:53:26.625131 IP s.s.s.s.80 > b.b.b.b.59468: Flags [S.], seq 1966829679, ack 2382139586, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
16:53:26.647631 IP b.b.b.b.59468 > s.s.s.s.80: Flags [.], ack 1, win 258, length 0
16:53:26.650205 IP b.b.b.b.59468 > s.s.s.s.80: Flags [R.], seq 1, ack 1, win 258, length 0
এখানে, টিসিপি সংযোগ সেটআপ (প্রথম তিনটি প্যাকেট) এখনও ঠিক আছে। কিন্তু হেকটি এইচটিটিপি বার্তা কোথায়? কোন অনুরোধ বা প্রতিক্রিয়া নেই ?! কি হচ্ছে? এবং কেন সার্ভার তাত্ক্ষণিকভাবে আরএসটি প্যাকেটের সাথে সংযোগ বন্ধ করছে?
প্রথমে আমি অ্যাপাচি-র কিছু ভুল কনফিগারেশনের সন্দেহ করেছিলাম (আমি কী করছি তা সত্যিই না জেনে আমি কখনও কখনও সেখানে জিনিসগুলি পরিবর্তন করি)। তাই আমি অ্যাপাচি বন্ধ করে দিয়ে পাইথন সিম্পল এইচটিটিপিএস সার্ভার স্ক্রিপ্ট শুরু করেছি। ওয়্যারশার্ক এবং tcpdump ট্রেসগুলি বেশ একইরকম দেখা গেছে তবে এখন পাইথন স্ক্রিপ্ট থেকে কমপক্ষে একটি ত্রুটি আউটপুট পেয়েছে:
----------------------------------------
Exception happened during processing of request from ('b.b.b.b', 59468)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 655, in __init__
self.handle()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 310, in handle_one_request
self.raw_requestline = self.rfile.readline(65537)
File "/usr/lib/python2.7/socket.py", line 476, in readline
data = self._sock.recv(self._rbufsize)
error: [Errno 104] Connection reset by peer
----------------------------------------
কিন্তু এটি আসলে আমাকে আর এনে দেয়নি। এসব কিছুর কারণ কী হতে পারে সে সম্পর্কে কারও কি ধারণা আছে?