用C语言实现telnet
时间: 2023-08-29 07:07:40 浏览: 139
Telnet是一种远程登录协议,可以使用Telnet客户端连接到远程服务器。下面是一个简单的用C语言实现Telnet的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MAX_BUF_SIZE 1024
int main(int argc, char* argv[]) {
if (argc != 3) {
printf("Usage: %s <ip> <port>\n", argv[0]);
return 1;
}
const char* ip = argv[1];
int port = atoi(argv[2]);
// 创建socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
return 1;
}
// 设置地址
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(ip);
addr.sin_port = htons(port);
// 连接服务器
int ret = connect(sockfd, (struct sockaddr*)&addr, sizeof(addr));
if (ret < 0) {
perror("connect");
return 1;
}
char buffer[MAX_BUF_SIZE];
fd_set read_fds;
while (1) {
// 清空文件描述符集合
FD_ZERO(&read_fds);
// 把标准输入和socket加入到文件描述符集合
FD_SET(STDIN_FILENO, &read_fds);
FD_SET(sockfd, &read_fds);
// 监听文件描述符集合
int maxfd = sockfd > STDIN_FILENO ? sockfd : STDIN_FILENO;
ret = select(maxfd + 1, &read_fds, NULL, NULL, NULL);
if (ret < 0) {
perror("select");
break;
} else if (ret == 0) {
continue;
}
// 判断标准输入是否有数据可读
if (FD_ISSET(STDIN_FILENO, &read_fds)) {
memset(buffer, 0, sizeof(buffer));
ret = read(STDIN_FILENO, buffer, sizeof(buffer));
if (ret < 0) {
perror("read");
break;
} else if (ret == 0) {
break;
}
ret = write(sockfd, buffer, strlen(buffer));
if (ret < 0) {
perror("write");
break;
}
}
// 判断socket是否有数据可读
if (FD_ISSET(sockfd, &read_fds)) {
memset(buffer, 0, sizeof(buffer));
ret = read(sockfd, buffer, sizeof(buffer));
if (ret < 0) {
perror("read");
break;
} else if (ret == 0) {
break;
}
printf("%s", buffer);
}
}
close(sockfd);
return 0;
}
```
编译并运行:
```
$ gcc telnet.c -o telnet
$ ./telnet <ip> <port>
```
其中,`<ip>`是远程服务器的IP地址,`<port>`是远程服务器的端口号。运行后,可以输入命令与远程服务器进行交互。
阅读全文