Python论坛  - 讨论区

标题:[python-chinese] socket问题

2007年01月04日 星期四 14:04

cafeeee cafeeee在gmail.com
星期四 一月 4 14:04:10 HKT 2007

FTP协议中有pasv, port等命令,需要得到本地的IP地址,但是socket.getsockname好像不合适,因为:

sock = socket.socket()
sock.bind(("0.0.0.0", 12345))
sock.listen(5)
...
(ip, port) = sock.getsockname()   # 总是得到("0.0.0.0", 12345),和C库的表现不大一样

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月04日 星期四 14:13

gashero harry.python在gmail.com
星期四 一月 4 14:13:41 HKT 2007

不知你在什么系统之下。 我曾经在Linux2.6下测试,发现在0.0.0.0监听时,获取的sock.getsockname()的返回值是与客户端相关的。如果客户端连接127.0.0.1,则返回也是这个段的,直接连接IP地址等等,都是不同的。

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月04日 星期四 14:34

cafeeee cafeeee在gmail.com
星期四 一月 4 14:34:00 HKT 2007

多谢

在连接建立起来以后sock.getsockname()是有用的;不过在FTP的这种情况中,连接还未建立,正是需要获取这些信息来建立连接。

我的系统是redhat 7.3,python 2.5

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月04日 星期四 14:38

刘星 liuxing在nanjing-fnst.com
星期四 一月 4 14:38:17 HKT 2007

我问个问题,python里面如何获取本机的外部IP地址?
主要是为了加入组播组的时候,获取到这个IP地址,以使自己加入组播组。
我以前的做法都是系统调用“ifconfig”,然后从里面取出IP地址段。
有没有直接的python类或者方法可以获取到?


--------------------------------------------------
Liu Xing
Development Dept.I
Nanjing Fujitsu Nanda Software Tech. Co., Ltd.(FNST)
8/F., Civil Defense Building, No.189 Guangzhou Road,
Nanjing, 210029, China
TEL: +86+25-86630566-836 
COINS: 79955-836 
FAX: +86+25-83317685
MAIL: liuxing在nanjing-fnst.com
--------------------------------------------------
----- Original Message ----- 
From: "cafeeee" <cafeeee在gmail.com>
To: <python-chinese在lists.python.cn>
Sent: Thursday, January 04, 2007 2:34 PM
Subject: Re: [python-chinese] socket问题


> 多谢
> 
> 在连接建立起来以后sock.getsockname()是有用的;不过在FTP的这种情况中,连接还未建立,正是需要获取这些信息来建立连接。
> 
> 我的系统是redhat 7.3,python 2.5
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月04日 星期四 15:01

gashero harry.python在gmail.com
星期四 一月 4 15:01:37 HKT 2007

一片混乱。这样,我给你指一个思路,自己考虑一下。没听懂你想要获得什么。
一个服务器建立的时候需要有一个socket,这个socket用于监听,而不是用于传输输出。而连接建立时,会从这个socket的accept方法获得另外一个socket,这个是用于传输数据的。这两个socket各有各的用途。同时有都有getsockname()方法。你可以分别调用他们试试。
我第一封回信里提到的不同实际上是指建立连接用于传输数据那个socket的getsockname方法的返回值。

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月04日 星期四 16:09

cafeeee cafeeee在gmail.com
星期四 一月 4 16:09:19 HKT 2007

不好意思,没说清楚。

FTP协议中有控制连接和数据连接两个TCP连接,在PASV命令中,FTP服务程序需要监听某一个端口(用于建立数据连接)并把自己的IP地址和监听的端口号通过控制连接发送给客户程序(以便客户程序连接进来),这个时候就需要在建立(数据)连接前得到本地的IP地址。

刚刚想到了解决方法:由于此时控制连接已经建立,可以使用通过控制连接的socket得到本地的IP地址:)

多谢多谢

不过还是很想知道,怎么样在不建立连接的情况下得到本地的IP地址,或者说,得到本地IP的最简单的方法。

On 1/4/07, gashero <harry.python在gmail.com> wrote:
> 一片混乱。这样,我给你指一个思路,自己考虑一下。没听懂你想要获得什么。
> 一个服务器建立的时候需要有一个socket,这个socket用于监听,而不是用于传输输出。而连接建立时,会从这个socket的accept方法获得另外一个socket,这个是用于传输数据的。这两个socket各有各的用途。同时有都有getsockname()方法。你可以分别调用他们试试。
> 我第一封回信里提到的不同实际上是指建立连接用于传输数据那个socket的getsockname方法的返回值。
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月04日 星期四 16:43

limodou limodou在gmail.com
星期四 一月 4 16:43:43 HKT 2007

On 1/4/07, cafeeee <cafeeee在gmail.com> wrote:
> 不好意思,没说清楚。
>
> FTP协议中有控制连接和数据连接两个TCP连接,在PASV命令中,FTP服务程序需要监听某一个端口(用于建立数据连接)并把自己的IP地址和监听的端口号通过控制连接发送给客户程序(以便客户程序连接进来),这个时候就需要在建立(数据)连接前得到本地的IP地址。
>
> 刚刚想到了解决方法:由于此时控制连接已经建立,可以使用通过控制连接的socket得到本地的IP地址:)
>
> 多谢多谢
>
> 不过还是很想知道,怎么样在不建立连接的情况下得到本地的IP地址,或者说,得到本地IP的最简单的方法。
>
一台机器可能有许多IP,所以具体用哪个还是要看与哪个服务器连接。直接得到本机的IP其实可能会得到多个IP。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月04日 星期四 17:17

gashero harry.python在gmail.com
星期四 一月 4 17:17:02 HKT 2007

哦,不好意思,我以前还不懂PASV模式。刚刚看了一下,确实有很大难度。如果你的FTP在NAT后面,那么就像刘星说得那样,如何获取外网IP才是要点。否则,发了自己的内网IP,对方肯定会出毛病了。
可以试试让FTP服务器启动时连接一些查IP的网站,他们会在页面上显示自己的外网IP,然后自己解析出来。
如果你想到了用什么更好的办法获得内网NAT中的FTP获取外网IP的办法,麻烦告诉我一下,谢谢。

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月05日 星期五 10:18

nmweizi nmweizi在163.com
星期五 一月 5 10:18:14 HKT 2007

python-chinese£¬ÄãºÃ
 
 Èç¹ûÔÚnatºóÃ棬һ°ãÓÃpasvÓÐÄѶȣ¬ÒòΪ»¹ÐèÒªÔÚnatÉ豸ÉÏ×÷nat¶Ë¿ÚÓ³Éä¡£
nmweizi£¬nmweizi在163.com
2007-01-05 
----- Original Message ----- 
From: gashero 
To: python-chinese 
Sent: 2007-01-04, 17:17:02
Subject: Re: [python-chinese] socketÎÊÌâ


Ŷ£¬²»ºÃÒâ˼£¬ÎÒÒÔÇ°»¹²»¶®PASVģʽ¡£¸Õ¸Õ¿´ÁËһϣ¬È·ÊµÓкܴóÄѶȡ£Èç¹ûÄãµÄFTPÔÚNATºóÃ棬ÄÇô¾ÍÏñÁõÐÇ˵µÃÄÇÑù£¬ÈçºÎ»ñÈ¡ÍâÍøIP²ÅÊÇÒªµã¡£·ñÔò£¬·¢ÁË×Ô¼ºµÄÄÚÍøIP£¬¶Ô·½¿Ï¶¨»á³ö벡ÁË¡£
¿ÉÒÔÊÔÊÔÈÃFTP·þÎñÆ÷Æô¶¯Ê±Á¬½ÓһЩ²éIPµÄÍøÕ¾£¬ËûÃÇ»áÔÚÒ³ÃæÉÏÏÔʾ×Ô¼ºµÄÍâÍøIP£¬È»ºó×Ô¼º½âÎö³öÀ´¡£
Èç¹ûÄãÏëµ½ÁËÓÃʲô¸üºÃµÄ°ì·¨»ñµÃÄÚÍøNATÖеÄFTP»ñÈ¡ÍâÍøIPµÄ°ì·¨£¬Âé·³¸æËßÎÒһϣ¬Ð»Ð»¡£

-- 
´ÓÇ°ÓÐÒ»Ö»ºÜÀäµÄëë³æ£¬ËûÏë»ñµÃÒ»µãÎÂů¡£¶ø»ñµÃÎÂůµÄ»ú»áÖ»ÓдÓÊ÷ÉϵôÏÂÀ´£¬Âä½ø±ðÈ˵ÄÁì¿Ú¡£
Ƭ¿ÌµÄÎÂů£¬Ö®ºó±ãʧȥÉúÃü¡£¶øºÜ¶àͬÀàÈ´Á¬ÕâƬ¿ÌµÄÎÂů¶¼Ã»Óеõ½¾Í..
ÎÒ»áµÃµ½ÎÂůô£¿Ð¡ÐÄÒíÒíµÄ³¢ÊÔ£¬È´»¹ÊÇ»áÊܵ½É˺¦¡£
ÎÒԸΪÄÇÒ»¿ÌµÄÎÂůȥƴ£¬¿ÉÊÇË­Ô¸Òâ½ÓÊÜ?

»¶Ó­·ÃÎÊżµÄ²©¿Í£º
http://blog.csdn.net/gashero
_______________________________________________
python-chinese
Post: send python-chinese在lists.python.cn
Subscribe: send subscribe to python-chinese-request在lists.python.cn
Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn
Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070105/7cde82a5/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号