C WebServer和Python客户端

时间:2016-11-09 14:02:28

标签: python c sockets network-programming client-server

我使用c制作了一个简单的网络服务器。我可以通过网络浏览器连接到它,它工作正常。

此网络服务器的目标是利用它。所以我编写了一个简单的python脚本,将恶意数据发送到服务器。但是,我只在服务器上收到一条错误消息:“文件描述符错误”。

C-Server Main:

int main(void) {
  int sockfd, new_sockfd, yes=1; 
  struct sockaddr_in host_addr, client_addr;  
  socklen_t sin_size;

  printf("Accepting web requests on port %d\n", PORT);

  if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)
    error_and_exit("in socket");

  if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
    error_and_exit("setting socket option SO_REUSEADDR");

  host_addr.sin_family = AF_INET;      
  host_addr.sin_port = htons(PORT);    
  host_addr.sin_addr.s_addr = INADDR_ANY; 
  memset(&(host_addr.sin_zero), '\0', 8);

  if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct sockaddr))     == -1)
    error_and_exit("binding to socket");

  if (listen(sockfd, 20) == -1)
    error_and_exit("listening on socket");

  while(1) {   // Accept loop
    sin_size = sizeof(struct sockaddr_in);
    new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size);
    if(new_sockfd == -1)
      error_and_exit("accepting connection");

    handle_connection(new_sockfd, &client_addr);
  }
 return 0;
}

python代码:

import socket
import struct
import sys
import time

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('127.0.0.1', 8000)
sock.connect(server_address)

shellcode =(....)

values = ....

try: 
    sock.sendall(values)
finally:
    sock.close()

注意:

1。 accept循环中的<sys/socket.h>函数(来自while(1))返回-1,调用error_and_exit("accepting connection")。因此,服务器永远不会为我的python客户端执行handle_connection

2。 error_and_exit函数的代码:

void error_and_exit(char *message) {
  char error_message[100];

  strcpy(error_message, " Error ");
  strncat(error_message, message, 83);
  perror(error_message);
  exit(-1);
}

0 个答案:

没有答案