前景提要
HDC调试需求开发(15万预算),能者速来!>>>
想模拟一下这种场景
socket client ==> socket server : 10011
当client ip变化的时候的这个socket的表现 (办公网络 无固定公网IP IP会时不时的变化)
实现步骤:
1. ssh socket server 执行如下命令 创建了一个Socket服务端 往客户端发送信息 # nc -lkp 10011 s1 s2 s3 ...
2. Java Socket客户端不停地读取服务端的输出
此时服务端执行lsof 可知客户端的公网IP是114.246.74.218 # lsof -i:10011 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nc 28060 root 3u IPv6 224375986 0t0 TCP *:10011 (LISTEN) nc 28060 root 4u IPv4 224375987 0t0 TCP *:10011 (LISTEN) nc 28060 root 5u IPv4 224376807 0t0 TCP izuf6cj2o216xpzfzh1rioz:10011->114.246.74.218:60957 (ESTABLISHED)
3. 打开VPN 模拟公网IP地址变化
Your IP: 45.62.52.37
本来想着Socket server 继续往客户端发送信息 看看此时客户端能不能成功接收到服务端发来的信息 即验证之前的Socket还有没有效
没想到打开VPN之后 服务端就断掉了 没法继续发送消息
packet_write_wait: Connection to 139.224.xxx.xx port 22: Broken pipe
重新ssh登录到服务器上 想着如何继续利用已存在的Socket继续发送信息 nc 28060 root 5u IPv4 224376807 0t0 TCP izuf6cj2o216xpzfzh1rioz:10011->114.246.74.218:60957 (ESTABLISHED)
执行下面的命令 不行 # nc -lkp 10011 Ncat: bind to :::10011: Address already in use. QUITTING.
于是想通过gdb来发送信息 即直接调用系统命令来发送 ssize_t send(int sockfd , const void * buf , size_t len , int flags );
但是不知道该怎么发送 # gdb -p 28060 # send("s4") # send("s5") # send("s6") (gdb)send(5, buf, len, flags )