OSError: [Errno 49] Can’t assign requested address@python
关于使用socket时遇到的问题记录
最近在使用python下socket编程时遇到了一系列问题,这里开一个帖子记录一下,方便自己日后学习,也给遇到相同问题的朋友一个解决的参考。
运行环境:
- MacBook Pro (13-inch, Late 2016)
- macOS Catalina
- python3.6.5
下面先给出源码
host = socket.gethostbyname(socket.gethostname())
print(host)
host = '192.168.1.104'
sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
print('---------- start bind ---------')
sniffer.bind((host, 0))
sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
print('---------- end bind ---------')
print('********************')
while True:
print('----------- print start --------')
print(sniffer.recvfrom(65535))
print('------------ one print end ----------')
需要注意的是,在代码:
host = socket.gethostbyname(socket.gethostname())
print(host)
我们可能获取的host可能为类似于220.111.230.22的IP地址,而实际上如果我们使用了路由器,电脑的实际IP地址可能是类似于192.168.1.88这样的类型,在这种情况如果运行程序,就会遇到如下报错:
sniffer.bind((host, 0))
OSError: [Errno 49] Can't assign requested address
此时,我们只需要先在终端输入:
$ ifconfig
查看到实际分配到的IP私有地址:
inet 192.168.8.103 netmask 0xffffff00 broadcast 192.168.8.255
将 192.168.8.103写入到代码块中即可。