2 a200710716 a200710716 于 2016.03.03 14:11 提问

python raw socket构造packet后能send,但是recv不了?
s = socket.socket(socket.AF_INET,
                  socket.SOCK_RAW,
                  socket.IPPROTO_RAW)
# IP Header
ipobj = IP(src_host, dst_host)
iph = ipobj.pack()
# TCP Header
tcpobj = TCP(1234, 80)
tcpobj.data_length = len(data)  # Used in pseudo header
tcph = tcpobj.pack(ipobj.source,
                   ipobj.destination)    

        # Injection
packet = iph + tcph + data    #构造好的packet

s.sendto(packet,(dst_host,80))
#s.connect((dst_host,80))不管是用send()还是sendto()都能发出去
response=s.recvfrom(1024)[0][0:]  #但是就是卡在这儿了,一直没有收到信息,不管是用recv()还是recvfrom()
    #response=s.recv(1024)
if response:
    ip = ipobj.unpack(response)
    response = response[ip.ihl:]
    tcp = tcpobj.unpack(response)
    print "IP Header:", ip.list
    print "TCP Header:", tcp.list

问题就是:构造的packet能够发出去,但是就是recv()没有收到任何信息,就一直卡在那里,加个settimeout的话,全部都是超时。我是想写个tcp syn扫描的。

参考代码的网址是:http://www.freebuf.com/articles/network/41127.html
https://github.com/OffensivePython/Pinject/blob/master/pinject.py

2个回答

oyljerry
oyljerry   Ds   Rxr 2016.03.05 09:25
已采纳

抓包分析一下,可能包直接被drop了。

weixin_38104501
weixin_38104501   2017.11.30 19:56

请问楼主解决了吗?小白求教...

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SOCKET之Send和Recv理解
int send(SOCKET s,  const char *buf,    int len,    int flags);   参数描述: SOCKET s         发送端套接字描述符 const char *buf  应用程序要发送的数据的缓冲区(想要发送的数据) int len          实际要发送的字节数 int flags
linux下用raw socket收发包实例
http://nking.blog.sohu.com/141645994.html http://blog.csdn.net/shanzhizi #include       // socket #include      // socket #include       // ioctl #include          // ifreq  #include
send 和recv详解
int send( SOCKET s,      const char FAR *buf,      int len,      int flags );   不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。 客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 该函数的第一个参数指定发送端套接字描述符; 第
socket编程中send()和recv()参数解析
1.send 函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓
send、recv等socket编程接口的阻塞与非阻塞模式.md
socket编程中经常使用send和recv函数来接收和发送数据。 对于系统来说,不管是发送数据还是接收数据,都不是直接在内存上操作的。 发送数据有发送缓冲区,接收数据有接收缓冲区。对于send来说,send函数调用时,先将将应用程序请求发送的数据拷贝到发送缓存中,而后驱动程序会去读取发送缓冲中的数据,在进行真正的传输。 对于recv来说,recv只是从接收缓冲中读取数据,而接收缓存中的数据来自
socket为send和recv设置超时时间
linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别   UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。 linux:     struct timeval timeout={3,0};//3s  
SOCKET中send和recv函数工作原理与注意点
send函数工作原理:   send函数只负责将数据提交给协议层。 当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR; 如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据; 如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的
Socket中send方法发送结构体和recv接受结构体
Linux网络通信 Linux下多客户端聊天软件 Linux程序设计 Linux socket send and recevie structure   最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下,发现也有不少朋友遇到同样的问题,所以就打算写出自己的解决办法,跟大家分享。   S
socket编程中send recv阻塞和非阻塞详解
int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。   该函数的第一个参数指定发送端套接字描述符;   第二个参数指明一个存放应用程序要发送数据
python socket编程详细介绍
Python 提供了两个基本的 socket 模块。    第一个是 Socket,它提供了标准的 BSD Sockets API。    第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 下面讲的是Socket模块功能 1、Socket 类型 套接字格式: socket(family,type[,protocal]) 使用