如何通过gdb来发送socket信息

zgw06629 发布于 02/19 22:15
阅读 109
收藏 0

想模拟一下这种场景

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 )

 

 

 

 

加载中
0
一码千里

不明白为什么非要这样瞎折腾

一码千里
回复 @zgw06629 : ip变了socket肯定不能接收ip报文了,你看到socket状态还在,那只是操作系统还没回收socket,进程没释放socket,但它肯定无法接收变了的ip了,这需要测试吗?最基本的常识啊~~
zgw06629
zgw06629
是这样 想模拟公网IP变了 先前的Socket是一个什么状态 还不能正常接收 这不使用nc直接启动Socket服务端简单吗 这不IP一变 ssh就退出了 再次ssh登录的时候 lsof看到nc进程还在 即先前的Socket还在 但是此时没办法通过nc交互终端往客户端发送信息了 所以也不知道此时这个客户端还能不能接收服务端的信息 于是想到能否直接在服务务端通过系统命令发送Socket信息给客户端吗
0
逗逼

gdb 不是用来调试的吗  

逗逼
回复 @zgw06629 : 菜鸡不知道gdb还有这么高级的用法,打扰了
zgw06629
zgw06629
对 就是想用gdb 来调试发送 接收 socket信息
返回顶部
顶部