2016-10-05 79 views
0

我在玩GCDWebServer類(很棒!),並想知道是否可以通過遠程IP限制允許的連接。如何在GCDWebServer中限制連接到允許的IP地址

server.addDefaultHandlerForMethod("GET", requestClass: GCDWebServerRequest.self, processBlock: {request in 

    let remote = request.remoteAddressString.substringToIndex(request.remoteAddressString.lastIndexOf(":")!) 
    let local = request.localAddressString.substringToIndex(request.localAddressString.lastIndexOf(":")!) 

    print("\(remote) vs \(local)") 
    if remote == local { 
     return nil 
    } 

    //Forbidden 
    return GCDWebServerResponse(statusCode: 403); 

}) 

上面我希望將工作,但它不是,我的意思是,當IP的不同將其發送403禁止但除此之外,它與結束:

[DEBUG] Connection aborted with status code 500 on socket 13

誰能幫助我?

P.S.下面還doenst工作

server.addDefaultHandlerForMethod("GET", 
             requestClass: GCDWebServerRequest.self, 
             processBlock: {request in 

    print(request.remoteAddressString) 
    print(request.localAddressString) 

    let remote = request.remoteAddressString.substringToIndex(request.remoteAddressString.lastIndexOf(":")!) 
    let local = request.localAddressString.substringToIndex(request.localAddressString.lastIndexOf(":")!) 

    print("\(remote) vs \(local)") 
    if remote == local { 
     return GCDWebServerResponse(statusCode: 200) 
    } 
    //Forbidden 
    return GCDWebServerResponse(statusCode: 403); 
}) 

回答

0

GCDWebServerProcessBlockGCDWebServer.h

塊必須返回GCDWebServerResponse或零誤差,這將導致500 HTTP狀態代碼返回給客戶端。

+0

你是說我應該成功(例如有效的ip)不返回'nil', 'GCDWebServerResponse(statusCode:200)'? –

+0

是的,你應該返回一個響應。返回零將導致500錯誤響應,這不是你想要的。 – Pol

+0

我按照建議,但沒有出現在屏幕上,頁面沒有加載,當我刪除這個'server.addDefaultHandlerForMethod'然後它的工作原理(但從任何IP):( –