- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 winsock 监听 8080 端口的 delphi 程序这是到目前为止的代码:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils,
WinSock;
var
WSAData: TWSAData;
ServerSocket,ClientSocket: TSocket;
ServerAddr, ClientAddr: TSockAddr;
ClientAddrSize,Status,ret: Integer;
Buffer1,buffer2: array[0..1024] of Char;
begin
writeln('started..');
WSAStartup($0101,WSAData);
ServerSocket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
ServerAddr.sin_family:=AF_INET;
ServerAddr.sin_port:=htons(8080);
ServerAddr.sin_addr.S_addr:=INADDR_ANY;
bind(ServerSocket,ServerAddr,SizeOf(ServerAddr));
listen(ServerSocket,10);
ClientAddrSize:=SizeOf(ClientAddr);
ClientSocket:=accept(ServerSocket,@ClientAddr,@ClientAddrSize);
if ClientSocket <> INVALID_SOCKET then
begin
while True do
begin
ret:=recv(ClientSocket,Buffer2,SizeOf(Buffer2),0);
Writeln(Buffer2);
Readln(Input, Buffer1);
ret:=send(ClientSocket,Buffer1,SizeOf(Buffer1),0);
end;
end;
end.
正如您从此处的屏幕截图中所见:
我打开 netcat 并使用“nc 127.0.0.1 8080 -e cmd.exe”连接到我的程序打开远程命令 shell。
我的程序得到了你通常在打开命令提示符时看到的第一行,但后来我无法执行像“dir”这样的命令,即使我在
Readln(Input, Buffer1);
有什么想法吗?
编辑:如您所见,“dir”命令写在“C:\>”下面我需要像 netcat 那样做,也许我需要为命令创建一个管道。
最佳答案
到目前为止,这还不是绝对正确的,因为出于某种原因,它会回显第一个命令,而其余的则需要两次输入才能执行。
program Project1;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils,
WinSock,
uSockFunc in 'uSockFunc.pas';
var
WSAData: TWSAData;
ServerSocket,ClientSocket: TSocket;
ServerAddr, ClientAddr: TSockAddr;
ClientAddrSize: Integer;
Buffer1, buffer2 : string;
begin
writeln('started..');
WSAStartup($101,WSAData);
ServerSocket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
ServerAddr.sin_family:=AF_INET;
ServerAddr.sin_port:=htons(8080);
ServerAddr.sin_addr.S_addr:=INADDR_ANY;
bind(ServerSocket,ServerAddr,SizeOf(ServerAddr));
listen(ServerSocket,10);
ClientAddrSize:=SizeOf(ClientAddr);
ClientSocket:=accept(ServerSocket,@ClientAddr,@ClientAddrSize);
if ClientSocket <> INVALID_SOCKET then
begin
while True do
begin
Buffer2 := RecvLn(ClientSocket, #$A);
Writeln(Buffer2);
Buffer2 := '';
Readln(Input, Buffer1);
SendString(ClientSocket, Buffer1 + #13#10);
Buffer1 := '';
end;
end;
end.
我还使用了这个不是我的单位的“SendString”和“RecvLn”函数:
unit uSockFunc;
interface
uses windows, winsock;
const
EOL = #13#10;
function Connect(address : String; port : Integer) : Integer;
procedure Disconnect(sinsock : TSocket);
function SendBuf(s : TSocket; var Buffer; Len : Integer) : Integer;
function SendString(s : TSocket; str : String) : Integer;
function RecvLn(s : TSocket; Delim: String = EOL): String;
function RecvLen(s : TSocket) : Integer;
function RecvBuf(s : TSocket; var Buffer; Len : Integer) : Integer;
implementation
function Connect(address : String; port : Integer) : Integer;
var
sinsock : TSocket;
SockAddrIn : TSockAddrIn;
hostent : PHostEnt;
begin
sinsock := Winsock.socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(Port);
SockAddrIn.sin_addr.s_addr := inet_addr(pchar(address));
if SockAddrIn.sin_addr.s_addr = INADDR_NONE then
begin
HostEnt := gethostbyname(pchar(Address));
if HostEnt = nil then
begin
result := SOCKET_ERROR;
Exit;
end;
SockAddrIn.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
end; //CHANGE MADE
if Winsock.Connect(sinSock, SockAddrIn, SizeOf(SockAddrIn)) = SOCKET_ERROR Then
result := SOCKET_ERROR
else
result := sinsock;
end;
function SendBuf(s : TSocket; var Buffer; Len : Integer) : Integer;
begin
Result := send(s, Buffer, Len, 0);
end;
function SendString(s : TSocket; str : String) : Integer;
begin
result := SendBuf(s, str[1],Length(str));
end;
function RecvLn(s : TSocket; Delim: String = EOL): String;
const
BUFFER_SIZE = 255;
var
Buffer: String;
I, L: Cardinal;
begin
Result := '';
I := 1;
L := 1;
SetLength(Buffer, BUFFER_SIZE);
while (L <= Cardinal(Length(Delim))) do
begin
if recv(s, Buffer[I], 1, 0) < 1 then Exit;
///
if Buffer[I] = Delim[L] then
Inc(L)
else
L := 1;
Inc(I);
if I > BUFFER_SIZE then
begin
Result := Result + Buffer;
I := 1;
end;
end;
Result := Result + Copy(Buffer, 0, I - L);
end;
function RecvLen(s : TSocket) : Integer;
begin
if ioctlsocket(s, FIONREAD, Longint(Result)) = SOCKET_ERROR then
begin
Result := SOCKET_ERROR;
end;
end;
function RecvBuf(s : TSocket; var Buffer; Len : Integer) : Integer;
begin
Result := recv(s, Buffer, Len, 0);
if (Result = SOCKET_ERROR) and (WSAGetLastError = WSAEWOULDBLOCK) then
begin
Result := 0;
end;
end;
procedure Disconnect(sinsock : TSocket);
begin
closesocket(sinsock);
end;
end.
关于sockets - delphi中netcat之类的监听程序不回传命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28217461/
我有一个正在运行的树莓派,它在启动时开始监听端口 666。 'nc -k -l -p 666' 此服务器用于夺旗类型的游戏,我希望发生的情况如下。如果用户向服务器的 666 端口回显一条 secret
我有一些二进制命令(我用十六进制表示),需要将它们发送到远程设备(它是嵌入式数据收集设备)并观察答复。 使用netcat轻松连接 nc -v 192.168.200.34 19000 它坐在那里像蛤一
我想通过 netcat 发送以下内容: 99||0x00 (4 个 ASCII 字符和一个零) 这是怎么做的?我正在使用 Windows XP。 谢谢你。 最佳答案 # echo -ne "99||\
我正在尝试从 C: 执行以下命令 netcat 127.0.0.1 4444 这是我的代码: #include int main() { execlp("/usr/bin/netcat",
我使用简单的代码来测试一些服务: nc -v -w 2 google.com 80 Connection to google.com 80 port [tcp/http] succeeded! 它工作
是否可以仅在已使用的端口上监听(而不是创建新连接)TCP 数据包,即将数据从路由器发送到服务器。 我知道以下内容在提到的端口上启动监听进程,并将其保存在 pcap 中文件: 服务器端:nc -l -p
我正在尝试使用 netcat 每隔几毫秒读取文件中的一行,并将其发送到端口.. 到目前为止,我从 netcat 文档中知道它可以在发送的每行之间插入时间间隔: 这来自 netcat 帮助手册: -i
我有一个客户端连接到 localhost:10000 上的服务器。服务器不在同一主机中。但是我们无法从 IP 网络访问服务器。为此,我们正在编写自己的网络驱动程序来创建虚拟网络接口(interface
我有一个客户端连接到 localhost:10000 上的服务器。服务器不在同一主机中。但是我们无法从 IP 网络访问服务器。为此,我们正在编写自己的网络驱动程序来创建虚拟网络接口(interface
如果尝试连接的时间超过 3 秒(即:当端口未打开时),为什么以下 netcat 命令不会超时?我假设 -w 标志是我需要的。操作系统是 OSX 10.9。 nc -v -z -w 3 127.0.0.
是否可以通过 JavaScript、jQuery 或类似的东西在客户端使用 Netcat?基本上我想在客户端做类似以下的事情: nc 或 nc 123.456.789.10 9100 < myf
我有以下问题。我正在使用 Debian GNU/Linux Stretch,我正在尝试使用 netcat 作为一个简单的服务器。我使用以下命令启动它: $ netcat -l 127.0.0.1 33
我有一个 bash 脚本: #!/bin/bash while : do nc -l -p 30003 | python3 script.py done 我希望聆听始终
我有 2 个标题为 SERVER 和 CLIENT 的终端 我已经使用以下命令在 SERVER 上设置了一个 netcat 监听器 nc -lvp 12345 然后从 CLIENT 我连接到它使用 n
解决方案 while read -r line do echo $line done < <(nc -l -p 4001) 使用命令 nc -l -p 4001 -v 我可以监听条码扫
我正在使用 netcat 作为某些服务和 spark 流实例之间的桥梁。例如,服务将消息发送到 net cat 正在监听的 host:port,然后 spark 可以使用它。然而,有没有一种方法可以使
我在 Bash/Debian Linux 环境中建立了一系列到远程服务器的 netcat 连接,这些服务器定期向我发送消息。我不断地将这些消息的结果写入本地文件: nc 192.168.1.38 23
使用 netcat,我需要创建一个简单的服务器来响应简单的 JSON 数据。 首先我尝试使用 HTML 页面: while true ; do nc -l 8888 < index.html ; d
为什么当我从两个不同的终端执行以下命令时(在我的 Debian 8.4 机器上)没有输出“地址已在使用”类型的错误? netcat -p 1234 -l 我想知道为什么它不抛出错误,因为它启动了两个监
我有一个带有简单交互式命令行界面的嵌入式 Linux 应用程序。 我想从 telnet(或一般的网络)访问命令行。 但是,该过程应该在电路板打开时启动,并且是在一个独特的实例中。因此,以下 netca
我是一名优秀的程序员,十分优秀!