文档章节

Ch04 Socket Names and DNS

能东棍
 能东棍
发布于 2013/12/26 23:43
字数 882
阅读 41
收藏 0
点赞 0
评论 0

五个必要的设定

    address family

     一般是AF_INET IPV6就是AF_INET6

    socket type

      TCPSOCK_STREAMUDPSOCK_DGRAM

    Protocol

      Socket()接口的第三个参数有用到,一般填0,具体含义暂时不知道,好像是使用TCP还是UDP协议

    IP address    

    UDP or TCP port number:

    所有的套接字接口都会一定会用到这几个参数,例如socket.socket bind,就需要五个类型的参数设定了。

主动连接方,免去考虑使用IPV4还是IPV6getaddrinfo()

>>> from socket import getaddrinfo
>>> infolist = socket.getaddrinfo('gatech.edu', 'www')
>>> pprint(infolist)
[(2, 1, 6, '', ('130.207.244.244', 80)),   #得到了
(2, 2, 17, '', ('130.207.244.244', 80))]
>>> ftpca = infolist[0]
>>> ftpca[0:3]
(2, 1, 6)
>>> s = socket.socket(*ftpca[0:3])
>>> ftpca[4]
('130.207.244.244', 80)
>>> s.connect(ftpca[4])

    ftpca 是一个缩写,表示”family, type, protocol, canonicalname, and address”

    这样可以直接获取目标的配置信息,不需要进行额外的判断,直接进行连接操作。

getaddrinfo()参数说明和使用

    以下来自 python331.chm

    接口声明:socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)

    接口返回值: (family, type, proto, canonname, socketname)

 

参数family

    socket.AF_UNIX

    socket.AF_INET

    socket.AF_INET6

    These constants represent the address (and protocol) families, used for the first argument to socket(). If the AF_UNIX constant is not defined then this protocol is unsupported. More constants may be available depending on the system.

 

参数type

    socket.SOCK_STREAM   

    socket.SOCK_DGRAM  

    socket.SOCK_RAW

    socket.SOCK_RDM

    socket.SOCK_SEQPACKET

    These constants represent the socket types, used for the second argument to socket(). More constants may be available depending on the system. (Only SOCK_STREAM and SOCK_DGRAM appear to be generally useful.)

 

参数Protocol

     指定应用程序所使用的通信协议。此参数可以指定单个协议系列中的不同传输协议。在Internet通讯域中,此参数一般取值为0,系统会根据套接字的类型(上一个参数类型)决定应使用的传输层协议。

         

    在VC++里面的类型有(ws2def.h)

#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_ICMP 1 /* control message protocol */
#define IPPROTO_IGMP 2 /* internet group management protocol */
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
#define IPPROTO_TCP 6 /* tcp */
#define IPPROTO_PUP 12 /* pup */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_IDP 22 /* xns idp */
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */
#define IPPROTO_RAW 255 /* raw IP packet */
#define IPPROTO_MAX 256

    Python暂时不知道,socket.SOL_UDP

参数flags

    在VC++中的定义和说明(ws2def.h)

#define AI_PASSIVE                  0x00000001  // Socket address will be used in bind() call
#define AI_CANONNAME                0x00000002  // Return canonical name in first ai_canonname
#define AI_NUMERICHOST              0x00000004  // Nodename must be a numeric address string
#define AI_NUMERICSERV              0x00000008  // Servicename must be a numeric port number
#define AI_ALL                      0x00000100  // Query both IP6 and IP4 with AI_V4MAPPED
#define AI_ADDRCONFIG               0x00000400  // Resolution only if global address configured
#define AI_V4MAPPED                 0x00000800  // On v6 failure, query v4 and convert to V4MAPPED format
#define AI_NON_AUTHORITATIVE        0x00004000  // LUP_NON_AUTHORITATIVE
#define AI_SECURE                   0x00008000  // LUP_SECURE
#define AI_RETURN_PREFERRED_NAMES   0x00010000  // LUP_RETURN_PREFERRED_NAMES
#define AI_FQDN                     0x00020000  // Return the FQDN in ai_canonname
#define AI_FILESERVER               0x00040000  // Resolving fileserver name resolution

 

DNS服务

    搜寻域名对应的socketName时,一般先查找本地的hosts或者相应的缓存,如果上面两个都没有找到的话,那就通过DNS查找,通过DNS查找比较慢。第一次访问的时候速度比较慢,后面由于有了相应的缓   存,并且没有失效的话,那就不会通过DNS查找了。

       

    Default port: 53

    Libraries: PyDNS, dnspythonk, python3用不了

    使用上面的两个第三方库,可以通过查找DNS服务,查找MXMail Exchanger,邮件交换)记录来得到邮件地址所对应的邮件服务器的地址。

Zeroconf and Dynamic DNS

    当缺失DNS服务器时,可以使用另外两种技术来获取域名对应的socketname, Zeroconf Dynamic DNS

其他

   1.判断本地库是否具有IPv6的特性

>>> import socket
>>> socket.has_ipv6
True

 

    2.    查看一个对象的方法和属性

>>> import socket
>>> dir(socket)
['AF_APPLETALK', 'AF_DECnet', 'AF_INET'…

 




© 著作权归作者所有

共有 人打赏支持
能东棍
粉丝 7
博文 33
码字总数 24258
作品 0
南京
程序员
Netty 4.1.13.Final 发布,Java 网络服务框架

Netty 4.1.13.Final 已发布,该版本包括 bug 修复,性能提升和新功能,建议用户升级。详细更新如下: Return the correct Future from FixedChannelPool.release() (#6908) Close channels t...

淡漠悠然 ⋅ 2017/07/07 ⋅ 3

(读书笔记)网络是怎样连接的——浏览器生成消息

概览 本次探索之旅从用户在浏览器中输入网址(URL)开始。 生成HTTP请求消息 浏览器的工作会从对用户输入的网址进行解析开始。浏览器如何解析网址是我们的第一个看点。然后浏览器会根据网址的...

cjl72513 ⋅ 2017/12/21 ⋅ 0

网站性能优化

虽然网站优化在这个话题有点大,我只能从自己的一些理解分享一些自己对于网站优化的意见。 一: 首先,我们在优化网站之前我们要搞清楚我们的一个基本的上网流程。 上网的过程不管多么复杂,...

无贝赛马 ⋅ 2014/04/12 ⋅ 0

深入了解 Linux下安装DNS+Sendmail服务

DNS和Sendmail服务使用的人很多,笔者就给大家深入讲解下如何在Linux下安装DNS+Sendmail服务。 配置DNS详细过程 1.先设置好主机名 vi /etc/sysconfig/network 2.配置DNS主配置文件 vi /var/...

景光 ⋅ 2013/01/30 ⋅ 0

socket error code

Error Codes The ERRNO values below are set when API calls fail. Use xngetlasterror to retrieve the error code after an API call fails. Functionxngeterror_string) can be used to ......

miffa ⋅ 2014/08/18 ⋅ 0

DNS Prefetching的两三事

原文还是在简书编写的: DNS Prefetching的两三事 年前年后有点忙,又是追加功能,修改富文本编辑器,又是切我们的整体架构,好久没有更新了,最近同事发现了个有意思的文章,如下,是讲 DN...

乖小鬼YQ ⋅ 2017/11/29 ⋅ 0

Linux下利用ioctl函数获取网卡信息

linux下的ioctl函数原型如下: #include intioctl(int handle, int cmd, [int *argc, int argv]) 函数成功返回0,失败返回-1. 其相关命令接口如下: 在这里我们需要用到的结构体 #include s...

t146lla128xx0x ⋅ 2017/11/29 ⋅ 0

你可能不知道的 HTTP 协议

最近在项目中碰到了比较多 HTTP 相关的问题,小组对这些问题进行了学习和总结。 ch01. 跨域Ajax 背景小故事: 开放平台通过 JS 的方式将淘宝的核心功能集成到第三方网站。 而作为底层支持的 ...

oschina ⋅ 2012/06/21 ⋅ 17

Linux运维实战之DNS(bind)服务器的安装与配置

上次博文我们讨论了DNS的基础,本次博文我们重点来看看如何配置一台DNS服务器。 【本次博文的主要内容】 bind服务器简介(包括客户端工具dig的介绍) 配置正向解析DNS服务器 配置反向解析DNS...

土豆呼叫地瓜 ⋅ 2014/12/31 ⋅ 0

Node.js v0.10.27 (Stable) 发布

Node.js v0.10.27 (Stable) 发布了,改进记录包括: npm: upgrade to v1.4.8 openssl: upgrade to 1.0.1g uv: update to v0.10.27 dns: fix certain txt entries (Fedor Indutny) assert: En......

oschina ⋅ 2014/05/02 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 38分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部