重定向到PORT

我正在使用iptables将连接到我的路由器的客户端重定向到另一个端口(比如8080)

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 8080 

我正在运行执行二进制文件,将客户端重定向到一个网站。 说www.google.com。 我正在使用以下代码。

 #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include int main(int argc, char *argv[]) { int listenfd = 0, connfd = 0; struct sockaddr_in serv_addr; char *reply = "HTTP/1.1 301 Moved Permanently\r\n" "Server: Apache/2.2.3/r/n" "Location: http://www.google.com\r\n" "Content-Length: 0\r\n" "Connection: close\r\n" "Content-Type: text/html; charset=UTF-8\r\n" "\r\n"; char sendBuff[1025]; time_t ticks; listenfd = socket(AF_INET, SOCK_STREAM, 0); memset(&serv_addr, '0', sizeof(serv_addr)); memset(sendBuff, '0', sizeof(sendBuff)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(8080); bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); listen(listenfd, 10); while(1) { connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); printf("client connected\n"); send(connfd, reply, strlen(reply), 0); close(connfd); sleep(1); } } 

当我这样做时,客户端不会被重定向。 它在客户端浏览器的地址栏中显示重定向的地址。 并试图长时间转到www.google.com。 并以以下错误消息结束。

此页面未正确重定向。 Firefox检测到服务器正在以永远不会完成的方式重定向此地址的请求。

我修改了回复变量。 即使现在它没有按预期工作。 我怎么解决这个问题…

首先,换行符应为"\r\n" 。 其次,你没有正确地终止标题,标题应该是最后一个标题字段之后的换行符,然后是一个额外的空行。 第三,将Content-Length头字段设置为1000字节的长度,这可能使客户端期望回复在正文中应该有1000个字节,显然它不会。