2016-03-01 18 views
0

有沒有辦法通過bash/nc/xinetd/nginx巧妙的欺騙來運行只輸出Unix時間的TCP服務器然後斷開連接?服務於unix時間的TCP服務器

客戶端連接到TCP服務器,服務器以字符串形式輸出unix時間,例如, 「1456860938」,然後服務器斷開客戶端連接。

服務器應繼續運行以服務於許多客戶端,但每個連接的時間長度非常短。

+0

使用一個帶有php和php頁面的網絡服務器:'echo time();'輸出是(例如):'1456861853' – Cyrus

+0

嘗試不寫另一個web服務器代碼,儘管它會很簡單。 – garbagecollector

回答

0

一個快速的python腳本可能會訣竅。我引用了這個socket programming tutorial。這純粹是TCP,而不是HTTP服務器

''' 
TCP Time Server 
''' 

import socket 
import sys 
import time 
import signal 

HOST = '' # blank for All interfaces 
PORT = 8000 # Port to listen on 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# Signal handler to close the socket on exit 
def signal_handler(signal, frame): 
    s.close() 
    sys.exit(0) 

# Bind to port 
try: 
    s.bind((HOST, PORT)) 
    signal.signal(signal.SIGINT, signal_handler) 
except socket.error as msg: 
    print('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]) 
    sys.exit() 

# Listen for connections 
s.listen(1) 

print('Ready to serve') 

# Except connections forever 
while 1: 
    #wait to accept a connection - blocking call 
    conn, addr = s.accept() 
    conn.sendall(str(int(time.time()))) 
    conn.close() 

輸出示例:

$ nc localhost 8000 
1456868540 
0

假設你正在運行一個標準inetd,你可以簡單地添加到date因此/etc/inetd.conf

daytime   stream tcp  nowait nobody /bin/date date +%s 

重新加載後(sudo pkill -HUP inetd),您可以驗證結果:

$ netcat localhost daytime 
1456915174 

(顯然,如果您已經在那裏運行守護進程,請使用除daytime以外的端口)。