如何通过gdb来发送socket信息
想模拟一下这种场景
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 )
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
对 就是想用gdb 来调试发送 接收 socket信息
回复
@zgw06629 : 菜鸡不知道gdb还有这么高级的用法,打扰了
gdb 不是用来调试的吗
是这样 想模拟公网IP变了 先前的Socket是一个什么状态 还不能正常接收 这不使用nc直接启动Socket服务端简单吗 这不IP一变 ssh就退出了 再次ssh登录的时候 lsof看到nc进程还在 即先前的Socket还在 但是此时没办法通过nc交互终端往客户端发送信息了 所以也不知道此时这个客户端还能不能接收服务端的信息 于是想到能否直接在服务务端通过系统命令发送Socket信息给客户端吗
回复
@zgw06629 : ip变了socket肯定不能接收ip报文了,你看到socket状态还在,那只是操作系统还没回收socket,进程没释放socket,但它肯定无法接收变了的ip了,这需要测试吗?最基本的常识啊~~
不明白为什么非要这样瞎折腾