2017-08-28 40 views
0

サーバ(Python)からクライアント(Swift)へのsacpyを使用してTCPパケットを送信します。 HTTP Request in Swift with POST methodSwiftでTCPパケットを受信

迅速にコードを受信:

packet = IP()/TCP()/Raw() 
print(CLIENT_IP, CLIENT_PORT) 
packet[IP].dst = CLIENT_IP 
packet[TCP].dport = CLIENT_PORT 
#packet[Raw].load = str(to_text(places_list)) 
#print(str(to_text(places_list))) 
packet[Raw].load = "HELLO WORLD" 

send(packet) 

迅速でコードが基づいている:サーバーからメッセージを送信

var request = URLRequest(url: URL(string: "http://10.172.0.136:80")!) 
    request.httpMethod = "POST" 
    let postString = "x=30&y=10&name=hello" 
    request.httpBody = postString.data(using: .utf8) 
    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
     guard let data = data, error == nil else {             // check for fundamental networking error 
      print("error=\(String(describing: error))") 
      return 
     } 

     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {   // check for http errors 
      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print("response = \(String(describing: response))") 
     } 
     let responseString = String(data: data, encoding: .utf8) 
     print("responseString = \(String(describing: responseString))") 
     print("response = \(String(describing: response))") 
    } 
    task.resume() 

パケットがサーバから送信されますが、クライアントはそれを受信しません。 パケットをポートに送信しようとしましたが、そのポートからクライアントからサーバーに送信されました。また、ポート80(HTTP)に送信しようとしました。どちらの場合も は、エラーがあった。(10.172.0.136は、サーバーのIPです)

エラー=オプション(エラードメイン= NSURLErrorDomainコード= -1005 "ネットワーク接続が失われました" のUserInfo = {NSUnderlyingError = 0x608001043330 {エラードメイン= kCFErrorDomainCFNetworkコード= -1005 "(ヌル)" のUserInfo = {_ kCFStreamErrorCodeKey = -4、kCFStreamErrorDomainKey = 4}}、NSErrorFailingURLStringKey = http://10.172.0.136:80/、NSErrorFailingURLKey = http://10.172.0.136:80/、kCFStreamErrorDomainKey = 4、_kCFStreamErrorCodeKey = -4、NSLocalizedDescription =ネットワーク接続})

私は、問題がクライアントで受信していると仮定します(U Wiresharkを歌って、メッセージが正しく盗聴されたのを見ました)。 コードを簡単に修正する方法はありますか?それが本当に修正不可能な場合は、他の方法でパケットを迅速に受信することができますか?

答えて

0

問題は、TCPを不適切に使用していることです。確立された接続の外側に単一のパケットを送信しようとしており、HTTP要求に関連付けるために必要なフィールドの指定に失敗しています。

このためにScapyを使用しないでください。 (ある種の学問的な練習のためにそうしなければならない限り)それはまったく間違った仕事です。 HTTPサーバーを使用する - 単純なものをPythonで使いたいのであれば、組み込みのSimpleHTTPServerは妥当な出発点です。

+0

ありがとうございます。私は最後にSimpleHTTPServerの代わりにBottleフレームワークを使用しました。 – Inbal

関連する問題